参数强
首先,您需要阅读Strong Parameters http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html
使用 Rails 4,为了防止批量分配,您需要使用私有方法创建新的 ActiveRecord 对象来分配您需要的参数值:
#app/controllers/messages_controller.rb
Class MessagesController < ApplicationController
def create
@message = Message.new(message_params)
@message.save
end
private
def message_params #-> you can call this method what you like :)
params.require(:message).permit(:mess, :user)
end
end
这将从参数哈希中设置 ActiveRecord 对象的参数:
params {
"message" => {
"mess" => "value",
"user" => "value"
}
}
This should按原样通过您的表格;但是,如果你开始使用类似的东西form_tag http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-form_tag,你最终会没有message
param,从而阻止强 params 方法正常工作。
--
Form
您的表格可以简化:
<%= form_for @message, html: {class: "nifty_form"} do |f| %>
如果您填充form_for使用 ActiveRecord 对象 http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for-label-%23form_for+with+a+model+object,Rails 会自动为你提取路径;这对您的错误并不重要,因为您的表单正在将请求发送到create
无论如何都要行动
--
Method
The no method error
派生自对不存在或不支持该方法的对象调用方法(毫不奇怪)。
关于调试这个问题,你基本上需要寻找你可能在哪里调用.message
在物体上。这通常在视图或其他东西中(如果不在控制器中)
仅参考.message
处于strong params
你有的方法,我建议尝试这个:
def create
@message = Message.new(user_params)
if @message.save
redirect_to "http://itworks.com"
else
redirect_to "http://myspace.com"
end
这将使行动变得常规,这应该给它最好的发挥作用的机会。
--
协会
您可能遇到的另一个问题是您的 ActiveRecord 关联Message
模型。 ActiveRecord 关联在模型中定义,使您的对象能够附加关联数据
你遇到的错误could来自这样的事情:
#app/models/message.rb
Class Message < ActiveRecord::Base
belongs_to :message #-> won't work
end