我尝试使用new / create动作创建一个简单的消息控制器,当我调用新动作时,我通过查询字符串提供to_id param,
/消息/新?to_id = 1
包含收件人的ID,现在我的代码是:
def new
@message = Message.new
@message.to = User.find(params[:to_id])
end
def create
@message = Message.new(params[:message])
@message.from = current_user
respond_to do |format|
if @message.save
format.html { redirect_to messages_path }
else
format.html { redirect_to common_error_path, :notice => "failed to send message" }
end
end
end
这是非常默认的,我的问题是在新操作中创建的@message对象中的更改在create action中不可用并且我丢失了to_id值,我首先想到的是使用to_id值存储会话对象,但我认为这不是最好的主意,也许有人有更好的解决方案
答案 0 :(得分:1)
您需要在create上使用POST
传回该参数。例如,如果您有
belongs_to :to, :class_name => 'User'
您Message
模型上的
关联
app/views/messages/new.html.erb
<%= form_for @message do |f| %>
<%= f.hidden_field :to_id %>
...
<% end %>
以上假设您的new
行为保持不变。现在,在create
行动中,您的params[:message]
将等于{:to_id => 1}
,并会正确分配。
这有意义吗?