首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Partner()预期,got String()

Partner()预期,got String()
EN

Stack Overflow用户
提问于 2014-02-07 14:53:05
回答 1查看 241关注 0票数 0

我有一个课程模型,和类别有很多关系,我在我的表单上使用多个选择来获得一个对象数组,一个课程也可以有一个合作伙伴,用户可以从一个选择中选择这个,但是当我想要保存到数据库时,我调用params,然后我得到一个字符串而不是一个对象。不知道我怎么能解决这个问题

代码语言:javascript
复制
<%= 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>

在我的控制器里

代码语言:javascript
复制
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

//rails服务器输出

代码语言:javascript
复制
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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-07 15:47:08

试试这个:-

似乎该合作伙伴是一个模型和课程has_one合作伙伴,因此您必须将合作伙伴类对象分配给合作伙伴类对象,而不是实际上将id指定为字符串,就像您在

代码语言:javascript
复制
  params[:course][:partner] 
  => "1"

现在是一个字符串,如果您尝试执行类似于@course.partner = '1‘的操作,它将引发一个类似于上面的错误,因为在左侧我们有parter关联,而右侧有一个字符串。

就这么做

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21630778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档