Ruby on Rails, ActiveScaffold и родственники в базе данных - PullRequest
3 голосов
/ 15 мая 2009

У меня есть 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 ]

4 голосов
/ 19 мая 2009

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

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

class Form < ActiveRecord::Base
 has_many :questions
end

class Question < ActiveRecord::Base
 belongs_to :form
end

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

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

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 не может угадать, какое поле вы хотите показать.

Greets

4 голосов
/ 16 мая 2009

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

class QuestionsController < ApplicationController
  active_scaffold :question do |config|
    config.columns = [:id, :title, :input, :form_id]
    config.columns[:form_id].ui_type = :select
  end
end
0 голосов
/ 16 мая 2009

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

class Form < ActiveRecord::Base
 has_many :questions
end

class Question < ActiveRecord::Base
 belongs_to :form
end

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

...