【发布时间】:2014-03-22 15:23:26
【问题描述】:
我最近转换到 Rails 4 和强大的参数,我很难弄清楚这一点。
我的模型是这样的:
class Message
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
validates :name, :email, :body, :presence => true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
据我了解,我不需要包含此模型的强参数的控制器,因为我严格地“获取”它。我不会在任何地方更新或保存它,所以我不需要允许任何参数通过。但是,可以肯定的是,我有这个控制器:
class MessagesController < ApplicationController
private
def message_params
params.require(:message_params).permit(:name, :email, :body)
end
end
这会引发错误:
message = Message.new
message.name = 'test'
NoMethodError: undefined method `name=' for #<Message:0x007f9d620706f0>
我的模型曾经包含这个:
attr_accessor :name, :email, :body
而且效果很好。我在 Rails 4 升级中遗漏了什么,我需要更改什么才能再次访问这些属性?
【问题讨论】:
-
我想您正在创建一个无表模型,因此您需要包含 attr_accessor 它将为属性创建 setter 和 getter 方法
标签: ruby-on-rails ruby ruby-on-rails-4 model strong-parameters