【问题标题】:rails- creating record in a join tablerails-在连接表中创建记录
【发布时间】:2011-01-23 21:34:02
【问题描述】:

我正在尝试通过按钮操作在连接表中创建记录。为了解释,我将有一个事件模型,并希望跟踪每个用户的选定事件。

我使用了 HABTM 关系,因为我真的不需要任何额外的字段。

User.rb => has_to_and_belongs_to_many :events Event.rb => has_to_and_belongs_to_many :users Events_Users 迁移 => [user_id, event_id, id=>false]

所以我想我会怎么做......

users_controller.rb =>

def add_event
@user = User.find(session[:user_id])
params[:user][:event_ids] ||= []
  if @user.update_attributes(params[:user])
      flash[:notice]='Added to My Events'
  redirect_to :action => "index"
      end  
 end

btn_link 看起来像....

<% @events.each do |event| %>
<%= link_to image_tag("heart.gif"), :controller => 'user', :action => 'add_event' %>
<%=h event.name %>
<%=h event.description %>
<% end %>

但我不确定如何检查它是否正常工作...我将如何在控制台中执行这些操作,以便检查是否添加了记录?

u = User.find(1)
e = Event.find(1)

????? x = u.e.create ?????

【问题讨论】:

    标签: ruby-on-rails join


    【解决方案1】:

    试试这个:

    u = User.find(1)
    u.events << Event.find(1) # will add the Event object to the user events
    
    u.events.last # will show the event added
    

    【讨论】:

    • 效果很好!您如何在控制器中添加
    • &lt;&lt; 方法也可以在控制器中使用。 u.event 返回一个数组。本质上,您正在调用标准 Array 操作。 Rails 覆盖标准行为或&lt;&lt;(也称为push)操作来更新association 表。
    【解决方案2】:

    但我不确定如何检查它是否工作

    您可以在控制台中检查它,但它并不能证明它会一直有效。它将证明它对您的情况有效。下次你想测试一个简单的案例时,你应该再次进入控制台。

    改为: 你应该write tests。例如:

    def test_add_events_for_user
      u = users(:some_user)
      e1, e2 = events(:one), events(:two)
      post :add_event, user => {u.id, :event_ids => [e1.id, e2.id] }
      assert u.events.include?(e1)
      assert u.events.include?(e2)
    end
    

    当然你最好在测试中使用 factory_girl + shoulda。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 2020-08-18
      • 1970-01-01
      相关资源
      最近更新 更多