2014-03-02 24 views
0

在Rails 4中,爲什麼不將genre_id數組保存到數據庫中?我認爲這是因爲id被讀爲一個字符串,當它需要被保存爲一個整數,但在過去,我沒有這個問題。Rails多重選擇形式:不隱式將字符串轉換爲Integer

我在嘗試POST以下時no implicit conversion of String into Integer錯誤:

<%= form_for @project do |f| %> 
    <%= select_tag 'project[genres_projects_attributes][genre_id][]',  
     options_for_select(Genre.order(:id).collect{|g| [g.name, g.id]}), 
     { include_hidden: true, multiple: true, class: 'form-control'} %> 
    <% end %> 

在我的應用程序,

Project has_many :genres, through: :genres_projects 

我的參數是這樣的:

{"utf8"=>"✓","authenticity_token"=>"[xxx]", 
"project"=>{"name"=>"sdfds", 
"genres_projects_attributes"=>{"genre_id"=>["2", 
"3", 
"4"]}, 
"commit"=>"Go!"} 

我project_params:

def project_params 
     params.require(:project).permit(:id, genres_projects_attributes: 
     [:id, {genre_id: []}, :project_id]) 
    end 

下面是我的控制器的投擲錯誤的行:

def create 
    @project = Project.create(project_params) 
    end 
+0

你有基於項目的ID?當你從rails控制檯傳入參數時,你得到'project = Project.create!(project_params)'(注意感嘆號)時,你會得到什麼? – timpone

+0

不,項目沒有身份證進入。 – allenwlee

回答

0

可惜沒找到答案,所以做了以下解決方法:

@genre_ids = project_params[:genres_projects_attributes][:genre_id] 
@genre_ids.each do |g| 
    GenresProject.create!(project_id: @project.id, genre_id: g) 
end 

UPDATE:

我發現這是造成這個問題的第一個空白值。從Rails 4.x開始,你也可以在表單中添加include_hidden: false

再次更新:在PARAMS在未來

if project_params[:genres_projects_attributes] 
     @project.genres.delete_all 
     project_params[:genres_projects_attributes][:genre_id].each do |g| 
     @project.genres << Genre.find(g) 
     end 
     @project.update!(project_params.except :genres_projects_attributes) 
    else 
    @project.update!(project_params) 
相關問題