0

嗨,我正在尝试使用 Rails on Rest 2 - 带有 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

并显示我渲染的 _Form.html.rb (下面的摘录)

 <b>Add New People</b><br />
    <% (1..3).each do |i| %>
      <%= select_tag 'movie_new_role_person_id', options_for_select(@people), {
        :name => "movie[new_role][#{i}][person_id]"
      } %>
      <%= text_field_tag 'movie_new_role_name', '', {
        :name => "movie[new_role][#{i}][name]"
      } %><br />
    <% end %>
  </p>

  <p>
    <%= f.submit "Update" %>
  </p>

它呈现列表以供选择,但是当我提交时 - 没有任何内容写入数据库表。如果我在数据库中手动输入数据,那么它会显示在电影列表页面上,即:“斯蒂芬斯皮尔伯格 - 导演”等......任何帮助表示赞赏 - 在这个阶段让我发疯

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

谢谢

艾伦

4

1 回答 1

0

在调试包括 Chicagogrrl 的 !flag 之后,我再次调查了 movies_Controller 中的 params.permits,并认为我必须将方法类型添加到例外列表中。我找不到有关此语法的详细信息,但反复试验得到了回报。

  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 中的delete_roles 方法,new_role=>['person_id', 'name'] 采用new_role 单个参数。

我希望这可以节省其他人一些时间,如果有人需要更多信息,请再次询问艾伦

于 2013-08-16T09:22:24.747 回答