Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取错误:未定义的方法“errors';for nil:尝试使用表单时使用NilClass_Ruby On Rails - Fatal编程技术网

Ruby on rails 获取错误:未定义的方法“errors';for nil:尝试使用表单时使用NilClass

Ruby on rails 获取错误:未定义的方法“errors';for nil:尝试使用表单时使用NilClass,ruby-on-rails,Ruby On Rails,我有一个视图,它是另一个控制器的index方法,我试图向页面添加一个表单,但是我得到了一个错误 undefined method `errors' for nil:NilClass 我相当肯定is与我的路由有关,但我很难弄清楚错误发生在哪里 这是带有表单的视图 <% @song_ranks.each do |song_rank| %> <tr> <td><%= song_rank.title %></td> <

我有一个视图,它是另一个控制器的
index
方法,我试图向页面添加一个表单,但是我得到了一个错误

undefined method `errors' for nil:NilClass
我相当肯定is与我的路由有关,但我很难弄清楚错误发生在哪里

这是带有表单的视图

<% @song_ranks.each do |song_rank| %>
  <tr>
    <td><%= song_rank.title %></td>
    <td style="padding-left: 15px;"><%= song_rank.artist %></td>
    <td style="text-align: center;"><%= song_rank.ranknum %></td>
    <td style="white-space: nowrap; padding-left: 35px;">
    <td> <%= render 'layouts/songrankform', song_rank: @song_rank %> </td>

    </td>
  </tr>
<% end %>
这是我的routes.rb文件

  resources :band_songs do
    post 'upvote', to: 'band_songs#upvote'
    post 'band_songs_action'
    post 'updaterank', to: 'band_songs#updaterank'
  end
表单实际上是我复制到此视图的另一个模型的一部分


这个部分表单有一个模型,我将表单放入的视图和控制器有一个不同的模型。因此,我想做的是将另一个视图中的表单保存到另一个模型。

根据您的问题,您似乎没有在索引操作中初始化
@song\u rank

您没有正确传递表单对象。尝试改变

<td> <%= render 'layouts/songrankform', song_rank: @song_rank %> </td>



因为在你的循环中,
song\u-rank
是正确的对象,而不是
@song\u-rank

看起来好像@band\u-song没有定义。在哪里初始化它?可能在before_action中,或者在update method initilize中,它实际上是我试图将
song_rank
表单放入的另一个视图/控制器。下面的答案是,我现在可以在提交表单时创建新记录,但我需要它来更新现有记录,这是我遇到的问题。您不能使用来自其他控制器/操作的变量。假设你只有一个切入点,那就是你的行动。所有变量只能在那里初始化。因此可以在您的视图中使用它们是否可以使用
SongRank.update
来更新现有记录?表单立即提交,但它会创建一个新记录,而不是更新现有记录
<td> <%= render 'layouts/songrankform', song_rank: @song_rank %> </td>
<td> <%= render 'layouts/songrankform', song_rank: song_rank %> </td>