2016-03-09 3 views
0

У меня есть 3 модели в моей Rails 4.2 приложения:кокон перл: защитить вложенная связанный модель

class Vintage < ActiveRecord::Base 

    has_many :grapers, dependent: :destroy 
    has_many :grapes, through: :grapers 

    attr_accessible :grapers_attributes 
    accepts_nested_attributes_for :grapers, reject_if: :all_blank, allow_destroy: true 
    accepts_nested_attributes_for :grapes 

end 


class Grape < ActiveRecord::Base 

    has_many :grapers 
    has_many :vintages, through: :grapers 

end 


class Graper < ActiveRecord::Base 

    belongs_to :vintage 
    belongs_to :grape 

    attr_accessible :grape_attributes 
    accepts_nested_attributes_for :grape, reject_if: :all_blank 
    attr_accessor :name 

end 

Мой кокон форма с вложенными атрибутами работает хорошо. Моя проблема uniq заключается в том, что я не хочу разрешать создавать/обновлять виноград через вложенную форму.

Мои марочные владеет многими grapers связанные с винограда. Я не хочу, чтобы приложение могло создавать/обновлять виноград через эту форму. У меня есть другая форма, чтобы добавить виноград. Я просто хочу использовать вложенную форму, чтобы прикрепить виноград к мародерству через стражников.

Что я пропустил? Как запретить приложение редактировать виноград через вложенную форму?

На самом деле, например, если я вхожу в «Мерло» и не нажимаю на строку «Мерло», приложение изменит «Мерло» на «Мерло» в моей базе данных!

EDIT: Код на мой взгляд:

<%= link_to_add_association 'Add grape', f, :grapers, 'data-association-insertion-node' => "#vintage-grapes ol", 'data-association-insertion-method' => "append", :wrap_object => Proc.new {|graper| graper.build_grape; graper }, :partial => '/admin/vintages/graper_field' %> 

ответ

1

Если вы не хотите grapes быть создан, то вы должны удалить.

accepts_nested_attributes_for :grapes 

Вы форма кокона должна генерировать graper формы, из которых можно выбрать, но не редактировать grapes.

Также в вашем дезинфицирующем средстве не разрешается grapes_parameters.

+0

На самом деле, я уже удалил «accepts_nested_attributes_for: grapes» в винтажной модели. Но я все же могу изменить имя винограда, например. Что вы подразумеваете под grape_parameters в моем дезинфицирующем устройстве? Я добавил ссылку link_to_add_association в основное сообщение. –

+0

ОК, я прокомментировал «attr_accessible: grape_attributes» в модели graper. Кажется, что я работаю: я не могу изменить виноградник, который уже спасен. Мне нужно удалить graper (виноград) и добавить новый, если я хочу изменить. –

+0

По умолчанию rails 'sanitizer' является' strong_parameters', и вам не нужно комментировать 'attr_accessible'. –

Смежные вопросы