【问题标题】:undefined method `model_name' for NilClass:Class with Partials and Form forNilClass 的未定义方法“model_name”:具有分部和表单的类
【发布时间】: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 &lt;%= zoo.id %&gt; 放在页面上的任何位置,我会得到 id。然后,find_by_zoo_id 也正在被评估...如果我将255 放入一个硬编码的数字,它就可以工作。或者,如果我将它设置为变量@id = 255,然后传入@id,它就可以工作。

由于某种原因,zoo.id 仅在 form_for 内不起作用。如果我将它设置为页面上的实例变量@id = zoo.id,那也不起作用。

有什么想法吗?我敢肯定这是小事。

已编辑:

关系是 has_many :through。忘了提一下,我在同一个应用程序中将此代码用于不同的关联,它工作正常。

【问题讨论】:

  • current_userbookmarks 是如何关联的。这是has_many...through 关系吗?我认为这里的问题是您传递的zoo.id 不属于current_user。可能有一个带有zoo.id 的书签,但它不属于current_user。这可能吗?
  • 嘿,我在控制台中检查了这个:User.find(2).bookmarks.where(zoo_id: 255) 这个存在。

标签: ruby-on-rails


【解决方案1】:

您收到的错误表明 current_user.bookmarks.find_by_zoo_id(zoo.id) 为零。 find_by_zoo_id 可能不会给您任何回报

【讨论】:

  • 我将硬编码的数字换成find_by_zoo_id,它会返回动物园。 “zoo.id”返回 nil 或其他内容。但是如果我单独评估它来检查,它会返回数字。
【解决方案2】:

当然是——我正在遍历带有书签的动物园列表,但并非所有动物园都会被用户添加书签。我只需要添加一个附加条件。

<% if user_signed_in? %>
  <% if current_user.has_zoo_bookmarked_already? && current_user.bookmarks.find_by_zoo_id(zoo.id) %>
    #....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多