我有正文:文本内容:text sender_id:整数receiver_id:消息表中的整数
我在用户模型中有这个:
has_many :sent_messages, :class_name => "Message", :foreign_key => "sender_id"
has_many :received_messages, :class_name => "Message", :foreign_key => "receiver_id"
我在消息模型中有这个:
belongs_to :sender, :class_name=>"User", :foreign_key=>"sender_id"
belongs_to :receiver, :class_name=>"User", :foreign_key=>"receiver_id"
在您查看其他用户的个人资料时进行记录(我的意思是用户视图中的此链接)。
我这样称呼新消息:
<%= link_to "Send a Message",{:controller=>"messages",:action=>"new"}%>
我在messages_controller中有这些代码:
def new
@message = current_user.sent_messages.build
end
def create
@message = current_user.sent_messages.build(params[:message])
if @message.save
flash[:notice] = "Successfully created message."
redirect_to root_url
else
render :action => 'new'
end
end
#.....
此外,我在views \ messages \ new.html.erb
中有这些代码 <% form_for @message do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :body %><br />
<%= f.text_field :body %>
</p>
<p>
<%= f.label :content %><br />
<%= f.text_area :content %>
</p>
<p><%= f.submit "Submit" %></p>
<% end %>
点击链接后我填写正文和文字然后提交。一切都被保存,但receiver_id值为null。我尝试了很多事情,但我无法保存receiver_id
例如:我设置了这样的链接:
<%= link_to "Send a Message",{:controller=>"messages",:action=>"new",
:receiver_id=>@user.id}%>
它发送了我想要的用户ID,我可以用params获取这个值,但问题是我找不到将这个值保存到数据库同时保存其他值的方法。
答案 0 :(得分:0)
在参数中传递receiver_id
只会让new
方法访问它。您需要在params[:receiver_id]
方法中的某个位置访问和存储new
。
答案 1 :(得分:0)
大声笑我发现我像之前提到的那样打电话给新消息
<%= link_to "Send a Message",{:controller=>"messages",:action=>"new",
:receiver_id=>@user}%>
然后新方法将类似于消息模型
def new
@message =current_user.sent_messages.build(:receiver_id=>params[:receiver_id])
end
最简单的事情(实际上这对我来说是个大问题:))在views / messages / new.html.erb中添加此行在form_for
<%= f.hidden_field :receiver_id %>
答案 2 :(得分:0)
试
class MessagesController
def new
@message = current_user.sent_messages.build :receiver_id => params[:receiver_id]
end
end
我个人喜欢在网址中使用嵌套路由,如此
域/用户/ 123 /消息/新
然后你可以做
link_to "Send a message", new_user_message( @user )
所以你的控制器会说
class MessagesController
def new
@message = current_user.sent_messages.build :receiver_id => params[:user_id]
end
end