我正在创建RoR应用。我有一个问题,从视图发送参数到控制器。
我的观点:
<%= form_for(:message, url: create_message_path ) do |f| %>
<%= f.text_area :content, placeholder: 'Write new post' %>
<%= hidden_field_tag :user2_id, @user %>
<%= f.submit 'Send', class: 'btn btn-primary' %>
<% end %>
单击按钮后,将使用create action调用控制器,我想在其中创建新消息。消息模型字段为:user1_id,user2_id,content。
def create
@message = Message.new(user1_id: current_user.id, user2_id: params[:user2_id], content: params[:content])
if @message.save
CORRECT
else
INCORRECT
end
end
问题在于params [:content]。在创建新消息时,似乎此参数为nil。当我更改这样的代码时,它可以工作:
@message = Message.new(user1_id: current_user.id, user2_id: params[:user2_id], content: 'hello')
你有什么建议为什么会这样?
答案 0 :(得分:0)
您应该使用hidden_field_tag
帮助程序代替hidden_field
:
<%= f.hidden_field :user2_id, @user %>
另外,在您的控制器中,您应该:
def create
@message = Message.new(message_params.merge({user1_id: current_user.id})
# ...
end
# ...
private
def message_params
params.require(:message).permit(:user2_id, :content)
end
答案 1 :(得分:0)
如果您查看日志中生成的params
,content
将位于message
内,因此您需要更改
@message = Message.new(user1_id: current_user.id, user2_id: params[:user2_id], content: params[:content])
到
@message = Message.new(user1_id: current_user.id, user2_id: params[:user2_id], content: params[:message][:content])