rails会自动通过' @ variables'分成什么?

时间:2014-09-06 23:16:21

标签: ruby-on-rails partials renderpartial

我有一个简单的设置:

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上运行它,如果发生任何变化,事件就是用户的嵌套资源。

1 个答案:

答案 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

另外,如果你试图访问局部变量,你没有传递到局部变量,你的视图会爆炸,而实例变量只是零。在我看来,让视图爆炸更容易调试。