【发布时间】:2013-12-12 15:55:52
【问题描述】:
我遇到了一个奇怪的问题,我的 rails 应用程序似乎没有读取传递给部分的局部变量,而是仅在form_for 内部。 p>
我设置了一个按钮,用户可以在其中为对象添加书签,我们称之为zoo。
代码如下所示:
动物园列表视图:
<li><%= render 'directory/bookmarks', zoo: zoo %></i></li>
然后是目录/书签部分:
<% if user_signed_in? %>
<% if current_user.has_zoo_bookmarked_already? %>
<%= form_for(current_user.bookmarks.find_by_zoo_id(zoo.id), html: { method: :delete }, remote: true) do |f| %>
<%= button_tag do %>
<button class="btn btn-lg btn-block btn-primary">remove bookmark
<% end %>
<% end %>
<% else %>
<%= form_for(current_user.bookmarks.build(zoo_id: zoo.id)) do |f| %>
<%= f.hidden_field :zoo_id, value: zoo.id %>
<%= button_tag do %>
<button class="btn btn-lg btn-block btn-primary">bookmark
<% end %>
<% end %>
<% end %>
<% else %>
<% end %>
无论如何,问题是第三行的zoo.id 没有被评估。我收到此错误。
NilClass:Class 的未定义方法 `model_name'
奇怪的是页面上正在读取本地人。
如果我将此代码 sn-p <%= zoo.id %> 放在页面上的任何位置,我会得到 id。然后,find_by_zoo_id 也正在被评估...如果我将255 放入一个硬编码的数字,它就可以工作。或者,如果我将它设置为变量@id = 255,然后传入@id,它就可以工作。
由于某种原因,zoo.id 仅在 form_for 内不起作用。如果我将它设置为页面上的实例变量@id = zoo.id,那也不起作用。
有什么想法吗?我敢肯定这是小事。
已编辑:
关系是 has_many :through。忘了提一下,我在同一个应用程序中将此代码用于不同的关联,它工作正常。
【问题讨论】:
-
current_user和bookmarks是如何关联的。这是has_many...through关系吗?我认为这里的问题是您传递的zoo.id不属于current_user。可能有一个带有zoo.id的书签,但它不属于current_user。这可能吗? -
嘿,我在控制台中检查了这个:
User.find(2).bookmarks.where(zoo_id: 255)这个存在。
标签: ruby-on-rails