Работа с has_many через чекбоксы во вложенной форме - PullRequest
0 голосов
/ 05 февраля 2012

Я пытаюсь добавить отношение has_many_through через форму, вложенную в родительскую модель. Я не могу понять, возможно ли это?

Вложенная форма работает нормально без флажков. И флажки работают нормально, когда они находятся за пределами вложенной формы.

= semantic_form_for @raduser do |f|
  %ul       
    %li
      = f.text_field :expiration, :placeholder => 'Expiration Date', :id => 'expiration_date'
    - f.fields_for :radcheck do |builder|
      = builder.text_field :username, :placeholder => 'Stuff'
      -Radgroup.all.each do |group|
        %li
          = check_box_tag 'radcheck[radgroup_ids]', group.id, @radcheck.radgroup_ids.include?(group.id)
          = group.groupname          

    %li
      = f.submit

Это выдает ошибку:

 undefined method `radgroup_ids' for #<ActiveRecord::Relation:0x007faaa24c2468>

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

--- РЕДАКТИРОВАТЬ ДОБАВЛЕННЫЕ МОДЕЛИ ---

У Radusers есть много Radcheck (единственное число из-за устаревшего db). Radcheck имеет много радгрупп через radusergroup.

class Raduser < ActiveRecord::Base

  has_many :radcheck, :dependent => :destroy
  accepts_nested_attributes_for :radcheck, :reject_if => lambda { |a| a[:value].blank? }, :allow_destroy => true   

end

class Radcheck < ActiveRecord::Base
  self.table_name = 'radcheck'

  attr_accessible :attribute_name, :username, :value, :op, :radgroupcheck_id, :radcheck_serial, :radgroup_ids

  belongs_to :raduser

  has_many :radusergroup, :dependent => :destroy
  has_many :radgroup, :through => :radusergroup

end

class Radgroup < ActiveRecord::Base
  self.table_name = 'radgroup'

  has_many :radusergroup, :dependent => :destroy
  has_many :radcheck, :through => :radusergroup

end


class Radusergroup < ActiveRecord::Base

belongs_to :radcheck
belongs_to :radgroup

end

- ОБНОВЛЕНИЕ ВТОРОЕ -

 def new
  @radcheck = Radcheck.new
  ...      
 end

 def create
  @radcheck = Radcheck.new(params[:radcheck])
  ...
 end

--- ОБНОВЛЕНИЕ 3 ---

Мой БД в настоящее время выглядит так:

 +----------------+-----------------------+----------+------+
 | radcheck_id    | radgroup_id           | priority | id   |
 +----------------+-----------------------+----------+------+
 | 8              | 3                     |        1 |    1 |
 | 4              | 9                     |        0 |    2 |
 | 22             | 4                     |        1 |    3 |
 | 2              | 6                     |        1 |    4 |

У меня есть предложенное ниже решение, работающее.

То, что я надеялся сделать, это вставить в базу данных radcheck_username и radgroup_groupname, а не radcheck_id:

+----------------+-----------------------+----------+------+
| ...username    | --groupname           | priority | id   |
+----------------+-----------------------+----------+------+
| user123344     | group88888            |        1 |    1 |
| shushQb        | 30-minutes            |        0 |    2 |
| forty          | gigiig                |        1 |    3 |
| snang          | ps-staff              |        1 |    4 |

Возможно ли это?

1 Ответ

1 голос
/ 07 февраля 2012

Похоже, проблема в том, что вы пытаетесь получить доступ к различным группам Radcheck через метод, который еще не определен. Я вижу пару решений для этого. Можно было бы добавить отсутствующий метод radgroup_ids в вашу модель. В качестве альтернативы, я думаю, вы могли бы позвонить включить? по Radchecks радгрупп отношение.

Раствор А

В вашем классе Radcheck определите:

def radgroup_ids
  radgroups.map(&:id)
end

Раствор B

Внести незначительные изменения в способ проверки включенных групп Radgroups

@radcheck.radgroups.include?(group)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...