【问题标题】:Does rails automatically pass '@variables' into partial?rails 会自动将“@variables”传递给部分吗?
【发布时间】:2014-10-31 13:46:32
【问题描述】:

我有一个简单的设置:

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

【问题讨论】:

    标签: ruby-on-rails partials renderpartial


    【解决方案1】:

    您的参数是一个实例变量。因此,它可用于视图中呈现的任何部分。

    您可以查看有关在 rails 指南上渲染的更多信息:http://guides.rubyonrails.org/getting_started.html#rendering-a-partial-form

    最好将变量作为局部变量传递给局部变量,因为它更容易在其他操作中重用局部变量:

    http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables

    此外,如果您尝试访问未传递给局部变量的局部变量,您的视图会爆炸,而实例变量将为零。在我看来,让视图爆炸更容易调试。

    【讨论】:

    • 没错。我已阅读此指南数百次:/。我以为我完全理解那里发生了什么。我将不得不重新考虑局部、渲染和渲染助手。干杯伙伴!
    猜你喜欢
    • 2016-03-13
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2013-01-16
    • 2011-06-09
    • 1970-01-01
    • 2012-08-28
    相关资源
    最近更新 更多