2016-11-05 102 views
0

我在restaurants中使用腳手架方法在滑軌中創建了一個簡單的滑軌應用程序。如何從控制器傳遞實例變量到視圖?

這是restaurants_controller.rb的顯示和編輯控制器方法。請注意他們是如何只是空白方法:

# GET /restaurants/1 
    # GET /restaurants/1.json 
    def show 
    end 

    # GET /restaurants/1/edit 
    def edit 
    end 

這是restaurants/show.html.erb

<p id="notice"><%= notice %></p> 

<%= image_tag @restaurant.image_url %> 

<p> 
    <strong>Name:</strong> 
    <%= @restaurant.name %> 
</p> 

<p> 
    <strong>Address:</strong> 
    <%= @restaurant.address %> 
</p> 
... 

restaurants/edit.html.erb

<h1>Editing Restaurant</h1> 

<%= render 'form', restaurant: @restaurant %> 

<%= link_to 'Show', @restaurant, class: "btn btn-link" %> | 
<%= link_to 'Back', restaurants_path, class: "btn btn-link" %> 

這裏是我的問題:我目前的理解(可能是錯誤的)是我們定義了實例變量,在這種情況下,@restaurantrestaurant_controllers.rb中,並且Rails自動連接控制器中定義的變量更好的意見。例如,在餐館控制器指數法:

def index 
    @restaurants = Restaurant.all 
end 

當我打電話在index.html.erb@restaurants,滑道可以調出@restaurants從索引方法在views使用。

哪裏軌得到show.html.erb和即使showedit方法@restaurant實例變量edit.html.erbrestaurants_controller.rb都是空的方法呢?我使用Rails 5.

+0

你的控制器裏有'before_action:set_restaraunt'嗎? –

+0

您是否在控制器中使用CanCan和'load_and_authorize_resource'? – David

回答

0

所以軌道應用這產生支架

class TestsController < ApplicationController 
before_action :set_test, only: [:show, :edit, :new, :update, :destroy] 

private 

    def set_test 
    @test = Test.find(params[:id]) 
    end 
end 

acheives這一點,劑量與加入

@test = Test.find(params[:id])到每一個動作,如果你不需要..

即相加,將在由before_action

IM無軌親定義的操作實例變量,所以有可能是一個更好的答案,但我已經學會了不要質疑「鐵軌魔術」。

+0

,如果你生成自己的MVC並應用上面的相同練習,你也可以做同樣的事情。 –