我刚刚开始学习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,那么构建方法的重点是什么?我知道它必须做某事,因为删除它会破坏我的程序。
感谢任何帮助。谢谢!
答案 0 :(得分:0)
它是User和FriendRequest模型之间的中间模型。
通过使用方法BUILD,您可以创建一个新的ActiveRelationship,然后您可以创建新的FriendRequest。
用户&gt;&gt; ActiveRelationship&gt;&gt; FriendRequest