シンプルなプライベートメッセージングシステムを作成しようとしています
ネストされたルートがあります
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を取得できません
メッセージ変数を印刷すると、次のように表示されます...
[#<Message id: nil, content: nil, user_id: 1, to_id: nil, created_at: nil, updated_at: nil>]
:user_idは現在のユーザー(IDが1の私)ですが、to_id(今見ているユーザーで、IDが2だったとしましょう)を取得できないようです。
誰かがそれを取得する方法を教えてもらえますか?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.
誰かが理由を知っていますか?