0

而不是創建一個新的父,並創建子項。是否可以從家長列表中進行選擇,然後只創建分配給當前用戶和特定調查的孩子?僅創建子項並選擇嵌套形式的父項?

讓我們用這個例子:

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 

我不知道什麼是創造和新的行爲會變成。任何想法?

回答

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的其他屬性。