2014-02-07 57 views
0

我有一個課程模型,並與類別有多對多的關係,我在我的表單上使用多選擇來獲得一個對象數組,課程也可以有一個合作伙伴和用戶可以從一個選擇選擇這一點,但是當我想保存到數據庫我調用參數,然後我得到一個字符串,而不是一個對象。不知道我怎麼能解決這個合作伙伴()預期,得到的字符串()

<%= form_for @course do |f| %> 

<section class="new_course"> 
    <div class="row collapse"> 
    <div class="medium-5 small-centered column">  
     <%= f.label :course_title, :class=>"custom-prefix-class" %> 
     <%= f.text_field :title, :autofocus => true, :class=>"custom-input-class" %> 
    </div> 
    </div> 

    <div class="row collapse"> 
    <div class="medium-5 small-centered column">  
     <%= f.label :start_date, :class=>"custom-prefix-class" %> 
     <%= f.text_field :start_date, :class=>"custom-input-class" %> 
    </div> 
    </div> 

    <div class="row"> 
    <div class="medium-5 column with_chosen"> 
     <%= f.collection_select :categories, 
     Category.all ,:id,:name, 
     { include_blank: true}, 
     { class: 'chosen-select', :multiple=>true, :data => { :placeholder => ' ' }} 
     %> 
    </div> 
    </div> 
    <div class="row"> 
    <div class="medium-5 column"> 
     <%= f.collection_select :partner, 
     Partner.all.collect, :id,:name , 
     { include_blank: true }, 
     { class: 'chosen-select', :multiple=>false, :data => { :placeholder => ' Brand Partner' }} 
     %> 
    </div> 
    </div> 

在我的控制器

def create 
    @course = Course.new(course_params) 

    end 
    if @course.save 
    render :action=>'new' 
    end  
end 

private 
def course_params  
    params.require(:course).permit(:title, :start_date,:duration,:partner,:categories => []) 
end 

//軌服務器輸出

Started POST "/courses" for 127.0.0.1 at 2014-02-07 16:45:28 +0200 
Processing by CoursesController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"sKhAF2X6VOXTxZC9Pt51RFQfZSKdzXVWji6x4uwg+rI=", "course"=>{"title"=>"Marketing ", "start_date"=>"14-02-2014", "categories"=>["", "1", "2"], "partner"=>"1", "duration"=>"2-weeks"}, "commit"=>"Add new course"} 
Completed 500 Internal Server Error in 3ms 

ActiveRecord::AssociationTypeMismatch (Partner(#70274068591140) expected, got String(#70274066607160)): 
    app/controllers/courses_controller.rb:24:in `create' 
+0

是合作伙伴的典範?當然HAS_ONE合作伙伴嗎?你在'course_params'中有 –

+0

有':夥伴'鍵代替':partner => []'。 –

回答

0

嘗試了這一點: -

似乎因爲那個合作伙伴是模特和課程的合夥人,所以你 必須分配夥伴類對象,而不是id作爲字符串 實際上,你可以在問題中看到的上面的

params[:course][:partner] 
    => "1" 

值是一個字符串,現在,如果你嘗試做一些像@ course.partner ='1'會引發類似上面的錯誤,因爲在左邊我們有分配器關聯,右邊和一邊是一個字符串。

只是這樣做

def course_params  
    params.require(:course).permit(:title, :start_date,:duration,:partner,:categories => []) 
    if params[:course][:partner].present? 
    params[:course][:partner] = Partner.find params[:course][:partner] 
    end 
end 
+0

你能解釋一下最後一個字符串嗎 –

+0

@Monk_Code最後一個字符串嗎? –