【问题标题】:rails unable to pass instance variable to partialrails 无法将实例变量传递给部分
【发布时间】:2014-10-15 12:29:36
【问题描述】:

我是第一次使用 Rails 4。文档说您可以将实例变量传递给部分:

<%= render partial: "customer", object: @new_customer %>

所以我尝试做同样的事情。我正在使用全日历引擎并渲染 index.html.erb 并在其中渲染表单部分。我将@record 传递给部分。我知道记录不是 nil,因为我添加了 inspect_record 助手来检查 @record 确实存在:

<%= render "form", :object => @record  %>
<%= inspect_record @record %>

但是,在 _form.html.erb 部分中,@record 为 nil,此条件返回 false:

<% unless @record.nil? %>

注意我也试过这个:

<%= render 'form', locals: {record: @record} %>

我可能做错了什么?

【问题讨论】:

  • 在控制器动作中定义的实例变量如@this_one应该在动作视图和使用的所有局部视图之间可用。
  • 让我们看看你填充@record的控制器动作
  • @JTG 问题在于表单是通过对新操作的 ajax 调用呈现的,而不是索引操作。

标签: ruby-on-rails


【解决方案1】:

如果您正在使用:

<%= render 'form', locals: {record: @record} %>

然后,您需要在_form.html.erb 中使用变量record 而不是@record

<% unless record.nil? %>

说明:

locals: {record: @record} 表示,@record 的值将可以通过在正在渲染的部分中使用 record 来访问。

【讨论】:

  • Dan,如果这个没有帮助,认为应该的,尝试添加单词 partial,&lt;%= render partial: 'form' .... 明确表示 partial。
  • @IvanShamatov 好点,但是,部分被成功调用。
  • 遇到这个问题几次,当没有添加“部分”词影响记录时,但可能是因为收集部分,或者类似的东西,我不记得了。
  • @IvanShamatov 完全同意你的看法......我有时也遇到过这个问题......
  • 问题在于表单是通过对新操作的 ajax 调用呈现的,而不是索引操作。新操作没有带有 id 的现有 @record。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2011-06-09
  • 1970-01-01
  • 2013-01-25
  • 2013-09-06
  • 2013-09-10
  • 2012-08-28
相关资源
最近更新 更多