rails - создание записи в таблице соединений - PullRequest
4 голосов
/ 05 марта 2010

Я пытаюсь создать запись в таблице соединений из-за действия кнопки. Чтобы объяснить, я хотел бы иметь модель событий и хотел бы отслеживать выбранные события от каждого пользователя.

Я использовал отношения HABTM, так как мне не нужны никакие дополнительные поля.

User.rb => has_to_and_belongs_to_many: события Event.rb => has_to_and_belongs_to_many: пользователи Миграция 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 ?????

Ответы [ 2 ]

5 голосов
/ 05 марта 2010

Попробуйте это:

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
2 голосов
/ 05 марта 2010

Но я не уверен, как проверить, работает ли он

Вы можете проверить это в консоли, но это не доказывает, что оно всегда будет работать. Это докажет, что это сработало в вашем случае. В следующий раз, когда вы захотите протестировать один простой случай, вы должны снова перейти к консоли.

ВМЕСТО: Вы должны написать тесты . Например:

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 + musta в ваших тестах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...