2012-04-22 12 views
0

イム私は私のユーザーにレール、単純なプライベートメッセージングシステム</p> <p>を作成しようとしているのid属性コントローラで

resources :users do 
    resources :messages 
end 

ネストされたルートを持っているが、ページを表示し、私が持っています...

<%= form_for([current_user, @message]) do |f| %> 
     <div class="field"> 
     <%= f.text_area :content, placeholder: "Send a private message..." %> 
     </div> 
     <%= f.submit "Post", class: "btn btn-large btn-primary" %> 
    <% end %> 

ここで、現在のユーザーは、現在見ているユーザーにプライベートメッセージを送信できます。私は持っている私のmessage.rb上

...

belongs_to :user 

と私が持っているuser.rbで...私のユーザーコントローラ上

has_many :messages 

は私が

def show 
@user = User.find(params[:id]) 
@microposts = @user.microposts.paginate(page: params[:page]) 
if user_signed_in? 
    @message = current_user.messages.build(params[:messages]) 
end 

end 
を持つ作用を示します

ユーザーが自分のショーテンプレートで[送信]ボタンを押すと、自分のメッセージ作成アクションに移動しますが、ユーザーのIDを取得できませんUSER_ID IDで、私にある現在のユーザー(ある:私は

[#<Message id: nil, content: nil, user_id: 1, to_id: nil, created_at: nil, updated_at: nil>] 

...を見ている(またはに送信しようとしている)私は私のメッセージ変数をプリントアウトし

、それが言いました私はそれを取得する方法を教えてください誰かが私に教えてください?私はIDを隠しフィールドとして渡すことしか考えられませんが、それは安全ではないと聞きました。

助けていただければ幸いです。おかげ

更新:@Andrew

うーん、実際にその興味深い私がしなければ...

@message = current_user.messages.build(to_id: @user.id) 

と私は

<%= f.hidden_field :to_id, :value => @user.id %> 

に渡したので、私は

Can't mass-assign protected attributes: to_id. 
を取得します

誰でも理由を知っている?

答えて

1

UserIDを隠しフィールドに入れることは間違いありません。それはURLに最初に表示されます。

あなたのshowアクションにto_idを追加し、そのフォームがポストされたとき、それはmessages#createアクションに、メッセージフォームにusers#showアクションから流れてます、フォームでその上の隠しフィールドを持っている場合。

これは投稿していないため、showアクションには[:messages]というパラメータはありません。 URLが次のように表示されない限り:users/1?messages=foo、そのparams値は常にゼロになります。

+0

これは悪いです:to_id attr_accessible then? – Sasha

+0

待機nvm。私は実際にattri_accessibleにする必要はありません。なぜ私はそれを前にしなければならなかったのか分からない。私は何か間違っている必要があります。助けてくれてありがとう! – Sasha

1

表示ページで、非表示のフィールドを入力します。

<%= form_for([current_user, @message]) do |form| %> 
    <%= form.hidden_field :to_id, :value => @user.id %> 
+0

うん、作るのが悪いです:to_id attr_accessible? – Sasha

+0

待機nvm。私は実際にattri_accessibleにする必要はありません。なぜ私はそれを前にしなければならなかったのか分からない。私は何か間違っている必要があります。助けてくれてありがとう! – Sasha