阅读最新信息的大更新。
大家好,
我基本上是在寻找一个新用户创建他们的评级时,他们注册和编辑他们的任何个人资料信息在未来的日期在同一时间。
我试着回答这个问题
Rails nested form with has_many :through, how to edit attributes of join model?
但我面临的问题是试图将一个选择列表合并到组合中,并为用户提供多个利率。
型号代码:
user.rb
has_many :user_interests, :dependent => :destroy
has_many :interests, :through => :user_interests, :foreign_key => :user_id
accepts_nested_attributes_for :user_interests
interest.rb
has_many :user_interests, :dependent => :destroy
has_many :users, :through => :user_interests, :foreign_key => :interest_id, :dependent => :destroy
user_interest.rb
belongs_to :user
belongs_to :interest
查看代码:
app/views/user/_form.html.erb
<%= form_for(@user) do |form| %>
... user fields
<%= form.fields_for :user_interests do |ui_form| %>
... loop through ALL interests
<% Interest.all.each do |interest| %>
<%= ui_form.select :rating, options_for_select(1..10) %>
<%= ui_form.hidden_field :interest_id, :value => interest.id %>
<% end %>
<% end %>
<% end %>
@user.interests.build.build_interest
Interest(#2172840620) expected, got Array(#2148226700)
是什么小细节让我漏掉了或者弄错了,才导致了这个问题?
编辑:
我找到了一种方法来实现这一点,但是它需要在chrome开发工具中手动编辑HTML,我的表单元素的:name属性被生成为
user[user_interests_attributes][rating]
但如果我改成
user[user_interests_attributes][][rating]
嘿,伙计们,我有一个半功能版本,做了一些小改动:
查看代码:
<% form.fields_for :user_interests do |ui_form| %>
<p>
<%= ui_form.select :rating, options_for_select(1..5), :selected => :rating %>
<%= ui_form.label :interest_title %>
<%= ui_form.hidden_field :interest_id %>
</p>
<% end %>
def new
@user = User.new
Interest.all.each { |int| @user.user_interests.build({ :interest_id => int.id }) }
end
def edit
@user = @current_user
Interest.unrated_by_user_id(@user.id).each { |int| @user.user_interests.build({ :interest_id => int.id }) }
end
现在我可以编辑我的用户兴趣更新或创建,如果没有评级存在,但我得到一个错误,用户是空的,当我试图创建一个新的用户。我也无法访问表单中的任何兴趣属性来显示用户实际评分的兴趣。有人能帮上忙吗?