【发布时间】:2015-08-27 20:02:27
【问题描述】:
我正在构建一个基于位置的应用程序,并注意到一些奇怪的行为。我的模型如下:
class User < ActiveRecord::Base
has_many :attendances, dependent: :destroy
has_many :events, through: :attendances
class Event < ActiveRecord::Base
acts_as_mappable :lat_column_name => :latitude,
:lng_column_name => :longitude
has_many :attendances, dependent: :destroy
has_many :users, through: :attendances
class Attendance < ActiveRecord::Base
belongs_to :user
belongs_to :event
所以问题是,在创建新事件时,我首先有user.events.new(params),然后我有一个 if 语句来检查新事件是否正确保存,所以if event.save #do stuff. 当我这样做时,Attendance未创建将user 连接到新创建的event 的模型,而如果我有user.events.create(params),,则成功创建了新的Attendance。这是正常的吗?在这种情况下我必须使用user.events.create 吗?为什么在我创建user.events.new 然后event.save 时没有创建一个新的Attendance?
编辑:从events_controller.rb 添加Create 方法:
def create
if params[:username] && params[:password]
username = params[:username]
password = params[:password]
user = User.find_by(username: username)
if user
if user.authenticate(password)
event_title = params[:title]
event_date = Date.parse(params[:date])
event_description = params[:description]
latitude = params[:latitude]
longitude = params[:longitude]
event = user.events.new(title: event_title, date: event_date, description: event_description, latitude: latitude,
longitude: longitude)
if event.save
render :json => {id: event.id, title: event.title, date: event.date, description: event.description, latitude: event.latitude,
longitude: event.longitude
}
else
error_message(event.errors.full_messages)
end
#attendance = Attendance.find_by(user_id: user.id, event_id: event.id)
#attendance.update_attribute(:host, 1)
else
error_message("Authentication failed. Please login, or sign up.")
end
else
error_message("Username not recognized. Make sure username is right, or sign up.")
end
else
not_found
end
end
【问题讨论】:
-
你能告诉我们事件控制器吗?
-
当然。我将在我的事件控制器中编辑并添加 create 方法。
标签: ruby-on-rails associations has-many-through model-associations