rails 在view中引用关联model值
今天遇到一个问题。情景是这样的,有一张表invite和一张group表。group跟invite是一对多关系即
group.rb
has_many :invites
invite.rb
belongs_to :group
在创建invite的时候需要同时添加其属于那个group,这是我就蛋疼了。于是上网找资料,从afly中那边获知了fields_for这么一个帮助程序。
在invite的new.html.erb中如下写
<%= form_for(@invite) do |f| %> <div class="field"> 发送给<%= fields_for :receiver,@invite.receiver do |receiver_field| %> <%= receiver_field.text_field :name %> <% end %> </div> <div class="field"> 添加到<%= fields_for :group,@invite.group do |group_field| %> <%= group_field.text_field :name %> <% end %> </div> <div class="field"> <%= f.submit "确定"%> </div> <% end %>
receiver是接收着,与user表是一对多的关系。这样就可将invite.receiver跟invite.group赋值好了。
下面介绍后台代码的处理
receiver_name = params[:receiver][:name] group_name = params[:group][:name] @receiver = User.find_by_name(receiver_name) @group = Group.find_by_name(group_name)
通过http request中的params获得值。当时我很困惑params={"utf8"=>"✓", "authenticity_token"=>"yqinI6UF9qiGdBEmP3pNTTbZouSrnEK3f0u1ZZMAqHA=", "receiver"=>{"name"=>"Tom"}, "group"=>{"name"=>"杭电学生会"}, "commit"=>"确定"}
但是params[:receiver].name报错,原来处理应该按照上面的来,ruby真心奇葩。。。