rails-在连接表中创建记录

时间:2010-03-04 22:17:38

标签: ruby-on-rails join

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

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

User.rb => has_to_and_belongs_to_many:事件 Event.rb => has_to_and_belongs_to_many:用户 Events_Users Migration => [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 ?????

2 个答案:

答案 0 :(得分:5)

试试这个:

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

答案 1 :(得分: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。