【问题标题】:Create Child only and select a Parent in nested form?仅创建子项并以嵌套形式选择父项?
【发布时间】:2012-03-25 17:15:53
【问题描述】:

而不是创建一个新的父级并创建子级。是否可以从父母列表中选择,然后只创建分配给当前用户和特定调查的孩子?

让我们用这个例子:

class Survey < ActiveRecord::Base
  has_many :questions
  accepts_nested_attributes_for :questions
end

class Question < ActiveRecord::Base
  belongs_to :survey
  belongs_to :user
end

然后在控制器中:

def new
  # @survey = select menu of all Surveys
  3.times do
    question = @survey.questions.build
  end
end

def create
 # Saves new questions with current user
 if @survey.save
   flash[:notice] = "Success"
   redirect_to @survey
 else
   render :action => 'new'
 end
end

我不确定创建和新操作会变成什么。有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 nested-forms


    【解决方案1】:

    您可以对现有调查调用编辑操作,将所选调查传递给它:

    edit_survey_path(@survey)
    

    然后您可以在该操作中加载所选调查:

    def edit
      @survey = Survey.find(params[:id])
    end
    

    edit 视图中,使用嵌套表单添加/删除问题,然后在update 操作中,更新您的调查属性也会添加和删除问题。

    def update
      @survey = Survey.find(params[:id])
      @survey.update_attributes(params[:survey])
      redirect_to ...
    end
    

    假设您在 survey 模型中设置了 accepts_nested_attributes_for :questions,所有这些都将起作用。

    我的回答是对Ryan Bates' screencast on nested forms 的总结,我想你已经看过了,基于你的例子和他的例子的相似性。

    我想在这里指出的是,您可以使用完全相同的代码来实现您想要的,但是在您的父模型上使用编辑/更新操作而不是在子模型上新建/创建。

    编辑:

    要将当前用户分配给调查问题,请在 newedit 操作中进行显式分配:

    def new
      @survey = Survey.new
      3.times do
        question = @survey.questions.build(:user_id => current_user.id)
      end
    end
    
    def edit
      # find the preselected Survey...
      @survey = Survey.find(params[:id])
    
      # This adds a (one) new empty question, consider doing it via Javascript
      # for adding multiple questions.
      @survey.questions.build(:user_id => current_user.id)
    end
    

    questions 的表单中,添加:

    <%= form_builder.hidden_field :user_id %>
    

    不要忘记将form_builder 替换为您的实际表单构建器对象。

    现在所有新问题都将分配给当前用户,因为当前用户是通过表单连同questions 的其他属性一起提交的。

    【讨论】:

      猜你喜欢
      • 2016-02-12
      • 2013-03-18
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2013-01-13
      相关资源
      最近更新 更多