大家好,我正在学习Ruby on Rails,而且我目前正在做一个事件应用程序,用户可以创建事件并注册其他人的活动。
基本的东西,但我意识到当用户创建一个事件时,他没有自动添加到有人照片列表中。我想的并不是那么简单。
基础知识是通过名为Goings的表在User和Event之间建立了多对多的关系。它工作得很好,我可以得到
User.attended_events
Event.atendees
获取ActiveRecord关系。
当我在Events控制器中创建一个事件时,我将事件构建为
@user.events.build(description: event[:description], date: date_from_date_select_params(event, :date))
date_from_date_select是一个帮助器,可以将日期构建到日期时间对象中。
因此,当我执行@ user.save时,对象已创建,但我不知道它具有什么ID或类似的东西,我只知道它可能是用户创建的最后一个,所以我想要获得对象的唯一方法是使用created_at,但因为我的default_scope是(订单日期:: desc)而日期是用户给定的我不知道该怎么做
Event.where(user_id: @user.id).map{|event| @user.attended_events<<event if event.atendees.none?}
上面的代码完美无缺。我收到了用户事件,只有在没有参加者(事件是新的)时才将其附加到用户参加的事件中。
问题是我觉得我刚刚写了一些意大利面条代码,觉得那里有更优雅的解决方法。我正在学习
答案 0 :(得分:1)
build
方法会将新初始化的记录返回给您,因此您可以尝试将其添加到集合中,而不是重新获取它
# build a new event and store it in a variable
new_event = @user.events.build(description: event[:description], date: date_from_date_select_params(event, :date))
# save the event record directly
new_event.save
# append the new event to the "attended_events" collection
@user.attended_events << new_event