Ruby on rails 在rails 4中,表单中的第一个参数不能包含nil或为空
我是rails新手,在Michael Hartl的rails 4教程的帮助下做了一个项目 为以下用户创建表单时,它会显示 在rails 4中,表单中的第一个参数不能包含nil或为空Ruby on rails 在rails 4中,表单中的第一个参数不能包含nil或为空,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是rails新手,在Michael Hartl的rails 4教程的帮助下做了一个项目 为以下用户创建表单时,它会显示 在rails 4中,表单中的第一个参数不能包含nil或为空 <%= form_for(current_user.relationships.find_by(followed_id: @user.id)) do |f| %> <div> <%= f.hidden_field :followed_id %> &l
<%= form_for(current_user.relationships.find_by(followed_id: @user.id)) do |f| %>
<div>
<%= f.hidden_field :followed_id %>
</div>
<%= f.submit "Follow", class:"btn btn-large" %>
<% end %>
你能给我一个解决方案来避免这个错误吗?当我通过rails控制台在relationships表中插入数据时。没关系。但它不能从窗体创建任何新对象并显示此错误
解决方案。如果我像follow那样更改第一个参数,那么它会工作,但不会得到unfollow按钮
<%= form_for(Relationship.new(followed_id: @user.id)) do |f| %>
之所以出现此错误,是因为当前\u用户没有跟随@user,并且它们之间没有关系,因此当前\u user.relationships.find\u by(跟随\u id:@user.id)将nil作为参数返回表单 正确参考Michael Hartl的教程,您将看到
\u follow\u form.html.erb
<% unless current_user?(@user) %>
<div id="follow_form">
<% if current_user.following?(@user) %>
<%= render 'unfollow' %>
<% else %>
<%= render 'follow' %>
<% end %>
</div>
<% end %>
<%= form_for(current_user.relationships.find_by(followed_id: @user),
html: { method: :delete }) do |f| %>
<%= f.submit "Unfollow", class: "btn btn-large" %>
<% end %>
<%= form_for(current_user.relationships.build(followed_id: @user.id)) do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>
2) 当用户没有跟踪另一个用户时,会出现\u follow.html.erb
部分错误
\u follow.html.erb
<% unless current_user?(@user) %>
<div id="follow_form">
<% if current_user.following?(@user) %>
<%= render 'unfollow' %>
<% else %>
<%= render 'follow' %>
<% end %>
</div>
<% end %>
<%= form_for(current_user.relationships.find_by(followed_id: @user),
html: { method: :delete }) do |f| %>
<%= f.submit "Unfollow", class: "btn btn-large" %>
<% end %>
<%= form_for(current_user.relationships.build(followed_id: @user.id)) do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>
错误消息为
在rails 4中,表单中的第一个参数不能包含nil或为空
这意味着
form_for(current_user.relationships.find_by(followed_id: @user.id))
current\u user.relationships.find\u by(后跟@user.id)
返回nil。换言之,在当前用户的关系中,没有一个的跟在\u id==@user.id
后面
要解决此问题,请尝试找出为什么要搜索给定的@user.id
,以及为什么希望存在此关系
更新
由于您正在尝试创建新的关系,您可以使用
<%= form_for(current_user.relationships.build(followed_id: @user.id)) do |f| %>
相反
find.*
尝试在数据库中查找现有记录,而build
使用给定属性在内存中创建记录(即尚未保存到数据库)。在Hartl的教程中,它不起作用,但找到了一个简单的解决方案,而我正在检查cuurent_用户是否在跟踪用户?如果没有,那么partial会让我跟随页面。如果使用
我可以创建以下用户我无法理解,你想做什么?感谢大家的支持现在一切都很好:)我正确地遵循了他的教程,但无法摆脱这个错误。谢谢你的评论啊!我想你应该明白这一点,当你试图找到一个不存在的关系时,你会得到零。这就是为什么您将与当前用户进行检查。以下(@user)?,只有当它为true时,您才会调用相应的关系,如果它为false,您将显示用于形成关系的另一个表单。如果你正确地遵循教程,你将不会得到错误。请再检查一次。我不希望在我想与follow建立关系的地方存在这种关系。@user.id是当前_用户之外的其他id,当前_用户将跟随其他用户。@user.id为零,但原因是什么。此表单将显示在用户的显示页面中。在“用户控制器显示行动”中,这是对您的宝贵评论的感谢。我发现没有关系,因为它显示了这个错误。在这种情况下,我应该如何通过follow按钮建立关系?