我使用restaurants
的搭建方法在rails中创建了一个简单的rails应用程序。
这是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" %>
这是我的问题:我目前的理解(可能是错误的)是我们定义了实例变量,在本例中是@restaurant
中的restaurant_controllers.rb
,Rails自动连接控制器中定义的变量观点。例如,餐厅控制器中的索引方法:
def index
@restaurants = Restaurant.all
end
当我在@restaurants
中呼叫index.html.erb
时,Rails会从@restaurants
中使用的索引方法中调出views
。
即使@restaurant
中的show.html.erb
和edit.html.erb
方法为空,rails也会在show
和edit
中获取restaurants_controller.rb
实例变量方法?我正在使用Rails 5。
答案 0 :(得分:0)
所以rails通过将其应用于生成的支架来实现这一点
class TestsController < ApplicationController
before_action :set_test, only: [:show, :edit, :new, :update, :destroy]
private
def set_test
@test = Test.find(params[:id])
end
end
剂量与添加剂量相同
如果您不需要,请 @test = Test.find(params[:id])
执行每项操作。
然后,在before_action
定义的动作上设置实例变量im no rails pro,所以可能有更好的答案,但我学会了不要质疑“rails magic”。