我正在尝试创建一个简单的私人消息传递系统
我有一个嵌套的路由
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. 有人知道为什么吗?
发布于 2012-04-23 06:52:55
把一个UserID放在一个隐藏的字段中并没有错,一开始它在URL中是可见的。
如果您在show操作中添加了to_id,并且在表单中有一个隐藏字段,那么当表单发布时,它将从users#show操作流向message表单,然后流向messages#create操作。
def show
@user = User.find(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
if user_signed_in?
@message = current_user.messages.build(to_id: @user.id)
end
end请注意,show操作没有接收任何params:messages,因为您没有发送到这里。除非您的URL类似于:users/1?messages=foo,否则params值将始终为nil。
发布于 2012-04-23 06:55:14
在您的显示页面上,放入一个隐藏字段。
<%= form_for([current_user, @message]) do |form| %>
<%= form.hidden_field :to_id, :value => @user.id %>https://stackoverflow.com/questions/10272692
复制相似问题