2011-04-14 6 views
0

나는이 양식이 있습니다.사용자가 로그인하지 않은 상태에서이 코드를 전달하는 방법은 무엇입니까?

<%= 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

당신은 강제로, 그래서 그들은 다음 실패 할 수 있습니다 작성하는 사용자에게 양식을주고 싶어를 로그인하고 입력 한 데이터를 잃어 버리십니까? 꽤 나쁜 UX처럼 보입니다. –

+0

완전한 형식이 아닙니다. 그것은 단지 다음과 같은 버튼 일뿐입니다. 사용자가 로그인 한 후 사용할 수있는 기능을 보길 원합니다 ... –

답변

0

내가 User.new를 호출하기 위해 좋은 방법을 생각하지 않는다 이전에 제안 된대로. 당신은 항상보기에 구별 할 수 있습니다

<% if current_user %> 
    Form goes here 
<% else %> 
    <div class="follow_button">Log in to follow</div> 
<% end %> 

(또는 로그인 IN에 연결되는 두 번째 버튼 만들기)

0

일반 "로그 아웃 된"일반 사용자를 시스템에 추가 할 수 있으며, 세션이 없을 때 기본적으로 사용자를 클릭 한 다음 해당 클릭이 처리 될 때 해당 사용자를 확인합니다. 그러면 모델을 망가 뜨리지 않고 원하는 유연성을 누릴 수 있습니다.

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

I가 거의 같은 내 애플 리케이션의 관계와 그것을 작동하는 것 같다 :

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> 
관련 문제