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