Ruby on Rails, ActiveScaffold и родственники в базе данных

У меня есть 2 таблицы: форма, вопросы. Идея очень проста, каждая форма имеет много вопросов. Столы были отремонтированы

форма = | id | название |

вопросы = | id | название | вход | form_id |

и как вы можете догадаться, form_id является ключом формы ID.

class FormsController < ApplicationController
 active_scaffold :form
end

class QuestionsController < ApplicationController
 active_scaffold :question
end

class Question < ActiveRecord::Base
 has_one :form
end

class Form < ActiveRecord::Base
 has_many :question
end

и я хочу сделать activescaffold (вопрос) с выбором с доступными формами. Теперь я могу только ввести идентификатор формы, но не выбирать его из выпадающего меню. Как мне настроить рельсы или activescaffold?

Благодарю. Извините за мой английский:)

3 ответа

Решение

Вам нужно добавить некоторую конфигурацию в ваш контроллер.

class QuestionsController < ApplicationController
  active_scaffold :question do |config|
    config.columns = [:id, :title, :input, :form_id]
    config.columns[:form_id].ui_type = :select
  end
end

Если вы хотите, чтобы раскрывающийся список работал с activescaffold без головной боли, вы должны следовать этому простому правилу: раскрывающийся список будет работать только тогда, когда вы ссылаетесь на ассоциацию, объявленную в own_to. Составив смесь предыдущих ответов, вы можете:

в ваших моделях следуйте по пути рельсов. Уважайте множественное число и склонения. тогда напишите их как предложите аллесклар:

class Form < ActiveRecord::Base
 has_many :questions
end

class Question < ActiveRecord::Base
 belongs_to :form
end

Очень важно использовать единичные имена в ассоциациях с "own_to", в данном случае:form

В вашем контроллере используйте ответ Sarah Mei, но немного измените его, используя имя ассоциации, которое вы объявили в own_to, тогда у вас будет что-то вроде этого

class QuestionsController < ApplicationController
  active_scaffold :question do |config|
    config.columns = [:id, :title, :input, :form]
    config.columns[:form].ui_type = :select
  end
end

Если вы используете модели с более чем одним полем, не забудьте использовать def to_label, потому что ActiveScaffold не может угадать, какое поле вы хотите показать.

поздравил

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

class Form < ActiveRecord::Base
 has_many :questions
end

class Question < ActiveRecord::Base
 belongs_to :form
end

Надеюсь это поможет.

Другие вопросы по тегам