如何为不同类型的对象呈现不同的部分属于控制器中的其他对象

时间:2012-10-29 14:09:41

标签: ruby-on-rails ruby-on-rails-3

我构建的应用程序允许用户创建问题类型:真/假,单选和多选。所以,我创建了一些模型:

class QuestionType < ActiveRecord::Base
  attr_accessible :name, :shorcut
end

class Question < ActiveRecord::Base
  attr_accessible :content, :mark, :topic_id, :question_type_id, :answers_attributes
  belongs_to :topic
  belongs_to :user
  belongs_to :question_type
  has_many :answers, dependent: :destroy
  accepts_nested_attributes_for :answers
end

class Answer < ActiveRecord::Base
  attr_accessible :content, :question_id, :correct

  belongs_to :question
end

现在我要建立一个问题的索引页面,有3个链接为3类问题添加问题,当用户点击链接时,他们将转到页面创建问题,页面将有适当的表格类型题。在问题控制器中,我想存储问题类型ID以保存到问题 我认为地址是这样的:

http://example.com/questions/index:索引页面将有3个链接来创建问题。

http://example.com/question_types/1/questions/new:将为真/假问题呈现部分形式

http://example.com/question_types/2/questions/new:将为单选问题提供部分表单

http://example.com/question_types/1/questions/new:将为多项选择问题提供部分表格

我认为我必须将嵌套资源放在我的路线中,问题类型和问题模型具有上述类型的链接,但我不知道如何构建视图并像上面那样分开。请帮助我或给我一个想法,更好的方法:(

1 个答案:

答案 0 :(得分:1)

根据我对您的问题的理解,这可能会解决您的问题:

在您的app / views / questions / new.html.erb中,您可以这样做:



    case params[:question_type_id]
    when 1
    render :partial=>"/questions/new_true_false_question"
    when 2
    render :partial=>"/questions/new_single"
    when 3
    render :partial=>"/questions/new_multi"
    end

然后按照你喜欢的名称或者你喜欢的名字创建三个部分。

或者你可以通过chaning render:partial to render:template。

在控制器中完成

:)