如何在用户未登录时获取此代码?

时间:2011-04-14 00:04:17

标签: ruby-on-rails ruby ruby-on-rails-3

我有这样的表格:

<%= 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方法?

3 个答案:

答案 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 %>

(或制作第二个导致登录的按钮)