您好我正在尝试使用Rails on Rest 2 - 使用rails 4进行movielist教程并在进行新轨道时进行调整。我被困在电影角色的协会上。我已添加到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>
它呈现可供选择的列表,但是当我提交时 - 没有任何内容写入数据库表。 如果我在数据库中手动输入数据,那么它将显示在movielist页面上,即:“Stephen Spielberg - Director”等... 任何帮助表示赞赏 - 在这个阶段让我疯狂
我认为可能是params驱动的限制,但我没有关联样式params过滤器的好例子
由于
艾伦
答案 0 :(得分:0)
经过调试,包括Chicagogrrl的!标志后,我再次调查了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 =&gt; []接受数组参数并处理movies.rb中的delete_roles方法 new_role =&gt; ['person_id','name']接受new_role个体参数。
我希望这可以节省其他人的时间,如果有人需要的话,请再次感谢Alan