我有这样的表格:
<%= form_for current_user.relationships.build(:followed_id => @profile.user.id) do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<div class="follow_button"><%= f.submit "Follow" %></div>
<% end %>
并且由于它使用current_user
,因此当用户未登录时会抛出错误。我希望未登录的用户能够看到该按钮,但是它会失败:
before_filter :authenticate
。我该如何更改表单代码?好像我可能需要将relationship.build调用移动到控制器?或者我如何让按钮调用我的应用程序控制器中的authenticate
方法?
答案 0 :(得分:0)
您始终可以向系统添加通用的“已注销”用户,默认情况下不存在会话时,然后在处理点击时检查该用户。这样就可以在不破坏模型的情况下为您提供所需的灵活性。
答案 1 :(得分:0)
怎么样:
<% user = current_user || User.new %>
<%= form_for user.relationships.build(:followed_id => @profile.user.id) do |f| > <div>
<%= f.hidden_field :followed_id %></div> <div class="follow_button">
<%= f.submit "Follow" %>
</div>
<% end %>
我的应用程序中的关系几乎相同,似乎有效:
User.new.friendships.build(:friend_id => 4) # =>
<Friendship id: nil, user_id: 0, friend_id: 4, approved: false, canceled: false, marked_as_deleted: false, created_at: nil, updated_at: nil>
答案 2 :(得分:0)
我不认为以前建议调用User.new的好习惯。您始终可以在视图中进行区分:
<% if current_user %>
Form goes here
<% else %>
<div class="follow_button">Log in to follow</div>
<% end %>
(或制作第二个导致登录的按钮)