簡體   English   中英

rails-在連接表中創建記錄

[英]rails- creating record in a join table

我正在嘗試通過按鈕的操作在連接表中創建記錄。 為了解釋,我會有一個事件模型,並希望跟蹤每個用戶的選定事件。

我使用HABTM關系,因為我真的不需要任何額外的字段。

User.rb => has_to_and_belongs_to_many:events Event.rb => has_to_and_belongs_to_many:users 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 = uecreate ?????

試試這個:

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

但我不知道如何檢查它是否有效

你可以在控制台中檢查它,但它不能證明它總能工作。 它將證明它適用於您的情況。 下次要測試一個簡單的情況時,您應該再次進入控制台。

INSTEAD:你應該寫測試 例如:

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM