Passing local variables to a view from controller

后端 未结 5 887
鱼传尺愫
鱼传尺愫 2021-02-14 05:57

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         


        
相关标签:
5条回答
  • 2021-02-14 06:23

    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.

    0 讨论(0)
  • 2021-02-14 06:25

    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"}
    
    0 讨论(0)
  • 2021-02-14 06:27

    I think it should be like

    render 'books/show', :locals => {:resource => 'Some text'}

    It works for me

    0 讨论(0)
  • 2021-02-14 06:36

    Passing Data from the Controller to the View

    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:

    • It can access the instance variables @title, because they've been defined on the NovelController object by the time NovelController#index finishes running.
    • It can call instance methods of the instance variables @title.
    0 讨论(0)
  • 2021-02-14 06:47

    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.

    0 讨论(0)
提交回复
热议问题