在form_for帮助程序完成中,我的构建方法是什么?

时间:2017-03-20 02:10:12

标签: ruby-on-rails

我刚刚开始学习Rails,而且我目前正在研究一个淡化的Facebook克隆。我想知道我在form_for帮助程序中包含的构建方法到底是做什么的。这取自The Ruby On Rails Tutorial by Michael Hartl,我们做了类似的事情,但使用Twitter粉丝代替朋友请求。那时我无法绕过它,现在我仍然遇到麻烦。

以下是我在用户向其他用户发送好友请求时使用的表单。这是从@users呈现的部分形式(因此是user.id)

<%= form_for(current_user.active_relationships.build) do |f| %>
  <div><%= hidden_field_tag :friend_id, user.id %></div>
  <%= f.submit "Send Friend Request" %>
<% end %>

这传递给我的友谊控制员......

def create
  @user = User.find(params[:friend_id])
  current_user.send_friend_request(@user)
  redirect_to current_user
end

调用send_friend_reqeust ...

def send_friend_request(other_user)
  friend_requests << other_user
end

我的用户模型has_many :friend_requests, through: :active_relationships

它运行正常,但我开始质疑我的form_for帮助器中的current_user.active_relationships.build甚至是什么。对于我(非常)未经训练的眼睛,看起来表单传递隐藏值friend_id,然后友谊控制器用它来查找与该ID相关联的用户数据库记录。

如果我的表单所做的只是提交一个隐藏的用户ID,那么构建方法的重点是什么?我知道它必须做某事,因为删除它会破坏我的程序。

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

它是User和FriendRequest模型之间的中间模型。

通过使用方法BUILD,您可以创建一个新的ActiveRelationship,然后您可以创建新的FriendRequest。

用户&gt;&gt; ActiveRelationship&gt;&gt; FriendRequest