其中一个参数未正确发送到控制器

时间:2015-09-09 09:30:06

标签: ruby-on-rails

我正在创建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')

你有什么建议为什么会这样?

2 个答案:

答案 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)

如果您查看日志中生成的paramscontent将位于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])