Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails 4中的虚拟属性_Ruby On Rails_Ruby On Rails 4_Attr Accessor_Virtual Attribute - Fatal编程技术网

Ruby on rails rails 4中的虚拟属性

Ruby on rails rails 4中的虚拟属性,ruby-on-rails,ruby-on-rails-4,attr-accessor,virtual-attribute,Ruby On Rails,Ruby On Rails 4,Attr Accessor,Virtual Attribute,我如何在Rails4中使用虚拟属性(getter、setter),因为“attr\u accessible”已被删除 我这里有问题 def tags_list @tags = self.tags.collect(&:name).join(', ') end 在尝试更新/创建时,我可以访问上面的方法,但无法访问下面的setter def tags_list=(tags) @tags = tags end 在Rails 4中使用虚拟属性与使用attr_ac

我如何在Rails4中使用虚拟属性(getter、setter),因为“attr\u accessible”已被删除

我这里有问题

  def tags_list
    @tags = self.tags.collect(&:name).join(', ')
  end
在尝试更新/创建时,我可以访问上面的方法,但无法访问下面的setter

  def tags_list=(tags)
    @tags = tags
  end

在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

您是否将attr\u访问器和attr\u访问器混淆了?attr_accessible已消失-将被强参数取代。但据我所知,attr\u访问器仍然存在。对不起,它的attr\u访问器:tags\u list如果您使用attr\u访问器,您根本不需要定义getter或setter。attr_accessor是一个宏,可以为您创建这两个函数。我的问题是如何在Rails4中使用虚拟属性。这应该会有所帮助。我认为您不应该将实例变量命名为
@tags
,active record通常使用与getter同名的实例属性,
@tags\u list
可能是更好的选择。但它目前无法与#new和#create一起使用,这使得它非常无用,因为您必须始终分别编写
您的\u virtual\u attr=:某物。其他人注意到了这一点,并对如何处理它有了一些线索吗?我还注意到,调用
Tag.new(tags\u list:[1,2])
不会触发
tags\u list=()
virtual属性。。这是一个bug吗?@phikes,它是不是在动作之前的
:你的模型参数
?您可以选择指定:,仅指定:[:新建,:创建]或
exlcude:,除了:[:操作1,:操作2等]