我与我的应用程序中连接旅行和地址的条件有一个 has_one through 关系。每次旅行都有两个地址:起点和终点。地址可用于许多不同的旅行,既可以是起点,也可以是目的地。
在应用程序中,行程和地址通过名为 TripLocation 的模型连接,该模型作为布尔列“目的地”,用于设置地址是否用作行程的目的地。要了解有关这种关系的更多信息,请参阅我对同一个应用程序提出的上一个问题: Has_many through in Rails while assignment different roles
我希望应用程序用户在创建旅行时从可能的出发地和目的地地址列表中进行选择。这是我所拥有的,我知道这是不正确的:
<%= simple_form_form (@trip) do |f| %>
<%= f.error_notification %>
<%= f.input :origin, collection: Address.all, label_method: :kind, value_method: :id, label: "Starting address" %>
<%= f.input :destination, collection: Address.all, label_method: :kind, value_method: :id, label: "Ending address" %>
#other trip things here like date and time
<% end %>
(最终我会限制 Address.all 的地址选择,但现在我希望这个版本可以工作。)
当我尝试从此表单提交时,我收到以下错误消息:
NoMethodError in TripsController#create
undefined method 'id' for "1":String
所以这似乎期望有一个对象(带有一个id)而不是包含一个对象id的字符串。我知道数据库中应该出现哪些新条目才能正确连接所有内容,但我不确定如何使用 rails 到达那里,我希望有任何信息能够为我指明正确的方向。
编辑:这是trips_controller中创建操作的代码:
def create
@trip = Trip.new(trip_params)
if @trip.save
redirect_to @trip, notice: 'Trip was successfully created.'
else
render action: 'new'
end
end
由于这是 Rails 4,trip_params 是以下私有方法:
def trip_params
params.require(:trip).permit(:origin, :destination, :pickup_date, :pickup_time, :dropoff_date, :dropoff_time, :user_id, :company_profile_id, :vehicle_id)
end
现在我想知道是否需要在控制器中构建一个新的 TripLocation 对象,然后使用嵌套表单同时创建一个 Trip 和一个 TripLocation?