0

我有一个“有很多”B的模型A。

class A < ActiveRecord::Base
  has_many :B
  attr_accessible :title
end
class B < ActiveRecord::Base
  belongs_to :A
  attr_accessible :name
end

我想在我的“编辑 A”表单中添加一个字段:一个文本区域,我将在其中:name为每一行输入我的 B,并在提交时解析该字段并处理每一行。

问题是,我该怎么做?

编辑

跟随Rails - 添加不在模型中的属性并更新模型属性我来到了这个:

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)似乎从未被解雇。

我究竟做错了什么 ?

编辑 2

我的实际代码在这里可见:https ://github.com/cosmo0/TeachMTG/blob/edit-deck/app/models/deck.rb

4

2 回答 2

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
于 2013-12-21T15:08:10.723 回答
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

参考:attr_accessor api 文档

它在某种程度上对你有帮助吗?

于 2013-10-05T14:45:45.770 回答