Html “Rails如何编写”;创建;HABTM模型控制器中的动作

Html “Rails如何编写”;创建;HABTM模型控制器中的动作,html,database,ruby-on-rails-3,Html,Database,Ruby On Rails 3,我对Rails比较陌生,我在尝试使用它们之间有HABTM关联的模型时遇到了巨大的困难 这些是我的模型: challenge.rb: class Challenge < ActiveRecord::Base has_and_belongs_to_many :skills attr_accessible :description, :name, :relevant_content, :solutions, :skills end 错误: 技能(#70228688111620)

我对Rails比较陌生,我在尝试使用它们之间有HABTM关联的模型时遇到了巨大的困难

这些是我的模型:

challenge.rb:

class Challenge < ActiveRecord::Base
    has_and_belongs_to_many :skills
    attr_accessible :description, :name, :relevant_content, :solutions, :skills
end
错误: 技能(#70228688111620)预期,获得字符串(#14953820)

问题是我不知道如何处理技能散列,将其转换为挑战控制器创建操作中的对象数组。 我知道这应该很简单,但我找不到实际的解决办法。 我想知道如何编写代码,将技能集合与challenges controller中的挑战实例相关联

挑战者控制器#创建


谢谢

我的建议是远离HABTM,切换到
has\u many:通过
,随着时间的推移,它将更容易使用,并且更灵活地更改(添加属性)

下面是对这两者的一个很好的比较:


我的建议是远离HABTM,切换到
has\u many:通过
它可以更容易地使用,并且随着时间的推移可以更灵活地更改(添加属性)

下面是对这两者的一个很好的比较:

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

def approved_params
  params.require(:challenge).permit(
    :name,
    :description,
    ...
    :skills => []
  )
end
然后在您的创建/更新中包含:

def update
  @controller.update(approved_params)
end
就是这样

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

def approved_params
  params.require(:challenge).permit(
    :name,
    :description,
    ...
    :skills => []
  )
end
然后在您的创建/更新中包含:

def update
  @controller.update(approved_params)
end

就这样了

谢谢你的帮助,但我的问题还没有解决。我建议你试试has_mun:through,如果它不起作用,请将错误和代码作为另一个问题发布。坚持住,rails有很多小事情要知道,但如果你坚持下去并继续发布,它可以工作。我试试看。在我的“创建”操作中编写关联的最佳方式是什么?你能给我举个例子吗?谢谢你,你需要看一下文档并试一试。在指南中,rubyonrails。。。你会去看医生、病人和预约,所以对你来说,这将是挑战、技能和挑战。在railscast中,您可以看到类别、产品和分类,对于您来说,这是挑战、技能和挑战技能。请先试一试,如果遇到新问题(我不会检查这个)。重构代码后,我意识到问题出在我的params散列中。我不知道将“skills”=>[“”,“3”,“4”]转换为{{{“id”=>3,“name”=>“Senso Critico”}的最佳方式是什么。这些关联类型在一些存根代码中都运行良好。我将设法找到散列问题的解决方案。谢谢你的帮助,但是我的问题还没有解决。我建议你试试has_many:through,如果它不起作用,把错误和代码作为另一个问题发布。坚持住,rails有很多小事情要知道,但如果你坚持下去并继续发布,它可以工作。我试试看。在我的“创建”操作中编写关联的最佳方式是什么?你能给我举个例子吗?谢谢你,你需要看一下文档并试一试。在指南中,rubyonrails。。。你会去看医生、病人和预约,所以对你来说,这将是挑战、技能和挑战。在railscast中,您可以看到类别、产品和分类,对于您来说,这是挑战、技能和挑战技能。请先试一试,如果遇到新问题(我不会检查这个)。重构代码后,我意识到问题出在我的params散列中。我不知道将“skills”=>[“”,“3”,“4”]转换为{{{“id”=>3,“name”=>“Senso Critico”}的最佳方式是什么。这些关联类型在一些存根代码中都运行良好。我将设法找到散列问题的解决方案。谢谢
{"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!"
}
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