简体   繁体   中英

rails- creating record in a join table

I'm trying to create a record within a join table from the action of a button. To explain, I would have an events model and would like to track selected events from each user.

I used the HABTM relationship since I dont really need any extra fields.

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]

So how I thought I would do it is....

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

and the btn_link looks like....

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

But I'm not sure how to check to see if its working...How would I perform these action in the console so I can check if the records being added?

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

????? x = uecreate ?????

Try this:

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

But I'm not sure how to check to see if its working

You can check it in console, but it does not prove it will always work. It will prove it has worked in your case. Next time you want to test one simple case you should again go to console.

INSTEAD: You should write tests . For example:

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

And of course you'd better use factory_girl + shoulda in your tests.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM