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
Надеюсь это поможет.