rails 4中的虚拟属性

Ash*_*ala 10 ruby-on-rails virtual-attribute attr-accessor ruby-on-rails-4

我如何在rails 4中使用虚拟属性(getter,setter),因为'attr_accessible'已被删除.

我在这里遇到问题

  def tags_list
    @tags = self.tags.collect(&:name).join(', ')
  end
Run Code Online (Sandbox Code Playgroud)

在尝试更新/创建时,我可以达到上述方法,但无法达到下面的setter.

  def tags_list=(tags)
    @tags = tags
  end
Run Code Online (Sandbox Code Playgroud)

小智 13

在Rails 4中使用虚拟属性与使用attr_accessible几乎相同.您只需将虚拟属性添加到控制器中允许的参数(而不是attr_accessible),然后像往常一样在模型中添加getter和setter方法.

# your_controller.rb
private

def your_model_params
  params.require(:your_model_name).permit(:tags_list)
end
Run Code Online (Sandbox Code Playgroud)

  • 但它目前无法与#new和#create一起使用,这使得它几乎无用,因为你必须一直单独写`your_virtual_attr =:something`.其他人都注意到这一点,并对如何处理它有一定的线索? (2认同)