我有一个简单的设置:
class EventsController < ApplicationController
def edit
@user = User.find(params[:user_id])
@event = Event.find(params[:id])
end
end
事件\ edit.html.erb:
<h1>Edit <%= @user.name %>'s event</h1>
<%= render 'form' %>
事件\ _form.html.erb:
<%= form_for [@user, @event] do |f| %>
<%= f.label :title %>
<%= f.text_field :title %>
<%= f.label :description %>
<%= f.text_area :description %>
<%= f.submit %>
<% end %>
令我最大的惊喜是这段代码正在运行,我没有收到任何错误。表单部分知道@user和@event! 我一直认为我必须将参数作为本地传递才能在局部中访问它们,因此视图中的渲染必须是:
<%= render 'form', user: @user, event: @event %>
并且form_for行应更改为:
<%= form_for [user, event] do |f| %>
我在这里遗漏了什么吗?是不是在我困惑自己的那些日子里,我应该睡一觉呢?
我在Rails 4.1.4上运行它,如果发生任何变化,事件就是用户的嵌套资源。
答案 0 :(得分:3)
您的参数是一个实例变量。因此,它可用于视图中呈现的任何部分。
您可以在导轨指南上查看有关渲染的更多信息:http://guides.rubyonrails.org/getting_started.html#rendering-a-partial-form
最好将变量作为本地传递给partials,因为它更容易在其他操作中重用partial:
http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables
另外,如果你试图访问局部变量,你没有传递到局部变量,你的视图会爆炸,而实例变量只是零。在我看来,让视图爆炸更容易调试。