【发布时间】:2012-04-22 22:30:40
【问题描述】:
我正在尝试创建一个简单的私人消息系统
我有一个嵌套路由
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.
有人知道为什么吗?
【问题讨论】:
标签: ruby-on-rails forms controller