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\", :re
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.
You can get it as follows. All gives the same result. Here is the reference link.
render action: :show , locals: { resource: "Some text"}
render :show , locals: { resource: "Some text"}
render locals: { resource: "Some text"}
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.