Вопрос по ruby-on-rails, ruby-on-rails-4, attr-accessor, virtual-attribute – Виртуальные атрибуты в рельсах 4

9

Как я могу использовать виртуальные атрибуты (геттер, сеттер) в рельсах 4, какattr_accessible» удален.

Я получаю проблему, здесь

  def tags_list
    @tags = self.tags.collect(&:name).join(', ')
  end

Я могу достичь вышеупомянутым способом, но не могу достичь установщика ниже, при попытке обновить / создать.

  def tags_list=(tags)
    @tags = tags
  end
если вы используете attr_accessor, вы не должныНе нужно определять геттер или сеттер вообще. attr_accessor - это макрос, который создает их для вас. Jake Hoffner
извините, его attr_accessor: tags_list Ashwin Yaprala
Это должно помочьstackoverflow.com/questions/17135974/..., Я думаю, что вы не должны называть вашу переменную экземпляра@tagsобычно атрибуты экземпляра с тем же именем, что и у получателя, используются активной записью,@tags_list может быть лучшим выбором. rubish
Я новичок в рубине на рельсах. Мой вопрос, как использовать виртуальные атрибуты в рельсах 4. Ashwin Yaprala

Ваш Ответ

1   ответ
13

как и в attr_accessible. Вам просто нужно добавить свой виртуальный атрибут к разрешенным параметрам в вашем контроллере (вместо attr_accessible), затем добавить методы getter и setter как обычно в вашей модели.

# your_controller.rb
private

def your_model_params
  params.require(:your_model_name).permit(:tags_list)
end
@phikes, это простоbefore_action :your_model_params ? При желании вы можете указать:, только: [: new,: create] или.exlcude: , except: [:action1, :action2, etc.] Adrian Mann
Я также заметил, что звонитTag.new(tags_list: [1, 2]) Безразлично»уволитьtags_list=() виртуальный атрибут .. это ошибка? Feech
Но на данный момент он не работает с #new и #create, что делает его практически бесполезным, потому что вам придется писатьyour_virtual_attr=:something отдельно все время. Кто-нибудь еще заметил это и знает, как с этим справиться? phikes

Похожие вопросы