html - Rails 如何在 HABTM 模型 Controller 中写入 "Create" Action

标签 html database ruby-on-rails-3

我是 Rails 的新手,我在尝试使用它们之间具有 HABTM 关联的模型时遇到了巨大的困难。

这些是我的模型:

挑战.rb:

class Challenge < ActiveRecord::Base
    has_and_belongs_to_many :skills
    attr_accessible :description, :name, :relevant_content, :solutions, :skills
end

技能.rb:

class Skill < ActiveRecord::Base
    has_and_belongs_to_many :challenges

    attr_accessible :name
end

我还使用以下迁移创建了一个名为 challenges_skills 的连接表:

class CreateChallengesSkills < ActiveRecord::Migration
    def up
        create_table :challenges_skills, :id => false do |t|
        t.integer :challenge_id
        t.integer :skill_id
        end
    end

    def down
    drop_table :challenges_skills
    end
end

我正在使用下面的帮助程序来选择我的挑战所需技能:

<%= collection_select(:challenge, :skills, Skill.all, :id, :name, {}, {:multiple => "true"}) %>

HTML:

<select id="challenge_skills" multiple="multiple" name="challenge[skills][]">
    <option value="2">Pesquisa</option>
    <option value="3">Senso Critico</option>
    <option value="4">Criatividade</option>
    <option value="5">Colaboracao</option>
    <option value="6">Comunicacao</option>
    <option value="7">Proatividade</option>
</select>

这是我的参数哈希:

{"utf8"=>"✓",
 "authenticity_token"=>"n0ggK8eE7vjh+qY33lYbNLJtZW6Sz7LyM2IRVbAPwhM=",
 "challenge"=>{"description"=>"My description.",
 "skills"=>["", "3", "4"],
 "name"=>"Test Challenge",
 "relevant_content"=>"My relevant_content",
 "solutions"=>"My solutions"},
 "commit"=>"Create Challenge!"
}

错误: 预期技能(#70228688111620),得到字符串(#14953820)

问题是我不知道如何处理技能散列,将它变成我的挑战 Controller 创建操作中的对象数组。 我知道这应该很简单,但我找不到实用的解决方案。 我想知道如何编写代码以将技能集合与我在挑战 Controller 中的挑战实例相关联。

挑战 Controller #create

def create

    @challenge = Challenge.new(params[:challenge])

    ???

谢谢

最佳答案

实际的答案是将“技能”添加到您接受的参数中:

def approved_params
  params.require(:challenge).permit(
    :name,
    :description,
    ...
    :skills => []
  )
end

然后在您的创建/更新中:

def update
  @controller.update(approved_params)
end

就是这样

关于html - Rails 如何在 HABTM 模型 Controller 中写入 "Create" Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15960573/

相关文章:

java - 如何将文件 bundle 到应用程序中?

html - ionic 选项按钮中的按钮,但我希​​望它垂直对齐

sql - 从两个字段中选择第一个不同的值

ruby - 使用 RVM 在 OSX 上安装 Rails 3

javascript - AngularJs 和图表

mysql - 建立两个不同服务器的两个MySQL数据库之间的通信

PHP mySQL 不允许我插入到表中

ruby-on-rails - 如何从 Rails 中的 URL 获取查询字符串

macos - Selenium 不适用于 cucumber / capybara (开箱即用)-MacOSX

javascript - 将 JSON 数据从 php 传递到 html-data 属性,然后传递到 Javascript