我有一个模型A“有很多”B。
class A < ActiveRecord::Base
has_many :B
attr_accessible :title
end
class B < ActiveRecord::Base
belongs_to :A
attr_accessible :name
end
我想在我的“编辑A”表单中添加一个字段:一个textarea,我将在其中输入每行的B :name
,然后提交,解析字段,并处理每一行。
问题是,我该怎么做?
关注Rails - Add attributes not in model and update model attribute我来到这里:
class A < ActiveRecord::Base
has_many :B
attr_accessible :title
def my_b
list = ""
self.B.each do |b|
list += "#{b.name}\n"
end
logger.debug("Displayed Bs : " + list)
list
end
def my_b=(value)
logger.debug("Saved Bs : " + value)
# do my things with the value
end
end
但def bees=(value)
似乎永远不会被解雇。
我做错了什么?
我的实际代码在此处可见:https://github.com/cosmo0/TeachMTG/blob/edit-deck/app/models/deck.rb
答案 0 :(得分:0)
您可以输入:attr_accessor,例如:
class A < ActiveRecord::Base
has_many :B
attr_accessible :title
attr_accessor :field_of_happiness
def field_of_happiness=(value)
# override the setter method if you want
end
def field_of_happiness(value)
# override the getter method if you want
end
end
Reference: attr_accessor api doc
它在某种程度上对你有帮助吗?
答案 1 :(得分:0)
哦,我的。事实证明问题不在于模型,而是在控制器中...我忘了在update
方法中添加一个简单的行来将我的POST值分配给我的类字段......
无论如何,最终解决方案是:
在我的控制器中:
def update
@a.whatever = params[:a][:whatever]
@a.my_b = params[:a][:my_b]
@a.save
end
在我的模特中:
class A < ActiveRecord::Base
has_many :B
attr_accessible :whatever
def my_b
list = ""
self.B.each do |b|
list += "#{b.name}\n"
end
list
end
def my_b=(value)
# parse the value and save the elements
end
end