Ruby on rails Rails 4-关联-教程电影列表

Ruby on rails Rails 4-关联-教程电影列表,ruby-on-rails,ruby,associations,Ruby On Rails,Ruby,Associations,嗨,我正在尝试使用REST2上的Rails-movielist教程和Rails 4,并在使用新Rails时进行调整。我沉迷于电影角色的联想。我已添加到Movie.rb class Movie < ActiveRecord::Base has_many :roles, :dependent => :destroy has_many :people, :through => :roles validates_presence_of :title def new_r

嗨,我正在尝试使用REST2上的Rails-movielist教程和Rails 4,并在使用新Rails时进行调整。我沉迷于电影角色的联想。我已添加到Movie.rb

class Movie < ActiveRecord::Base

    has_many :roles, :dependent => :destroy
  has_many :people, :through => :roles
validates_presence_of :title
  def new_role=(values)
    values.each do |i, hash|
      unless hash[:name].blank?
        roles.create(:person_id => hash[:person_id], :name => hash[:name])
        roles.save
      end
    end
  end

 def deleted_roles=(values)
   values.each do |role_id|
      roles.find(role_id).destroy
    end
  end

end
class电影:销毁
有很多:人,:通过=>:角色
验证是否存在:title
def新_角色=(值)
值。每个do | i,散列|
除非哈希[:name]。为空?
创建(:person\u id=>hash[:person\u id],:name=>hash[:name])
角色。保存
结束
结束
结束
def deleted_roles=(值)
values.each do | role_id|
角色。查找(角色\u id)。销毁
结束
结束
结束
并显示我呈现的_Form.html.rb(以下除外)

添加新人员
“电影[新角色][{i}][person\u id]” } %> “电影[新角色][{i}][name]” }%%>

它呈现可供选择的列表,但当我提交时,不会将任何内容写入数据库表。 若我在数据库中手动输入数据,那个么它会显示在电影列表页面上,比如:“斯蒂芬·斯皮尔伯格-导演”等等。。。 感谢任何帮助-在这个阶段让我发疯

我认为这可能是参数驱动的限制,但我没有一个关联样式参数过滤器的好例子

谢谢


艾伦

调试后,包括芝加哥的!flag I再次调查了movies_控制器中的params.permissions,并认为我必须将方法类型添加到excepted的列表中。我找不到关于这个语法的详细信息,但尝试和错误得到了回报

  app/controllers/movies_controllers.rb (excerpt)
 ......
     # Never trust parameters from the scary internet, only allow the white list through.
      def movie_params
       params.require(:movie).permit(:title,:description, :rating, :role, :deleted_roles=>[], 
        :new_role=> ['person_id', 'name'])
     end

delete_roles=>[]采用movies.rb中的数组参数和process to delete_roles方法 新的\u角色=>['person\u id','name']采用新的\u角色个人参数


我希望这能为其他人节省一些时间,如果有人需要更多信息,请再次询问“谢谢”,Alan

尝试将“创建”更改为“创建!”以抛出错误。谢谢Chicagorrl。我补充了这一点,并且做了我从一开始就应该做的事情,并且更紧密地调试了控制台输出。这个问题和params有关,一旦我弄明白了向params.allows添加方法的语法,它就工作得很好了。赢了我不会再犯那样的错误了,也许这两天的努力是值得的。再次感谢。我在答案部分添加了我使用的语法,以防感兴趣
  app/controllers/movies_controllers.rb (excerpt)
 ......
     # Never trust parameters from the scary internet, only allow the white list through.
      def movie_params
       params.require(:movie).permit(:title,:description, :rating, :role, :deleted_roles=>[], 
        :new_role=> ['person_id', 'name'])
     end