I am not able for some reason to pass local variables to the show view...
In my controller i have simply:
def show
render template: "books/show", :resource => "Some text"
end
In my view i print the following:
<h1>My local variable text: <%= resource %></h1>
And i am getting the following message:
undefined local variable or method `resource' for #<#<Class:0x00000118ebce90>:0x00000118ec3498>
I've tried the following syntaxes in the controller:
render template: "books/show", locals: { resource: "Some text" }
render template: "books/show", locals: { resource => "Some text" }
render template: "books/show", :locals => { resource: "Some text" }
render template: "books/show", :locals => { resource => "Some text" }
Without any luck...
Any clues ?
Thanks!
render locals: { resource: "Some text" }
First I am wondering why would you need the template:
. Are you on Rails 2.x? If not, then the :template
option is no longer required. You should be able to get along fine with just
render "books/show"
Second do you need to specify the template? What is the controller you want to render from? If that's BooksController
, then you don't need the template path either, which makes the line being just
render
That's without the variables yet. Now, I just checked, and a simple:
render locals: { resource: "Some text" }
as well as:
render 'books/show', locals: { resource: "Some text" }
works for me just fine. Maybe earlier Rails versions treated 'resource' as some kind of a keyword? Don't know, but the above Worksforme™ in both forms.
I think it should be like
render 'books/show', :locals => {:resource => 'Some text'}
It works for me
Here's a NovelController class, to be put into app/ controllers/novel_controller.rb.
class NovelController < ApplicationController
def index
@title = 'Shattered View: A Novel on Rails'
end
end
Since this is the Novel controller and the index action, the corresponding view is in app/views/novel/index.html.erb
<h1><%= @title %></h1>
Output:
Shattered View: A Novel on Rails
The view is interpreted after NovelController#index
is run. Here's what the view can and can't access:
@title
, because they've been defined on the NovelController
object by the time NovelController#index
finishes running.@title
.You can't pass local variables from a controller to a view. What you could do is define it as an instance variable and then it would automatically be available in the view.
@resource = @book
If you want to pass entirely different objects, then just define those instance variables differently.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With