我尝试使用嵌套资源保存form_for,这些资源将数据输入到属于其他2个模型且具有2个外键的模型中:User_id和listing_id。
问题是只有user_id被保存,尽管正在创建两个id,如控制台中所示,并且listing_id以正确的值传递。
我可能会遗漏一些显而易见的东西,但我对Rails相当新鲜。非常感谢帮助。感谢。
应用程序模型:
belongs_to :user
belongs_to :listing
清单模型:
has_many :applications
用户模型
has_many :applications
控制器:
class ApplicationsController < ApplicationController
before_action :authenticate_user!
def index
end
def update
@application = current_user.applications.create
end
def new
@application = Application.new
@listing = Listing.find(params[:listing_id])
end
def create
@application = current_user.applications.create(application_params)
redirect_to listing_applications_path
end
def your_applications
@apps = current_user.applications
end
private
def application_params
params.require(:application).permit(:listing_id, :st_address, :unit, :city, :state, :move_in,:first_name, :last_name, :phone_numer, :pets, :current_address, :previous_landlord_name, :previous_landlord_phone, :company, :company_address, :company_phone, :is_40X, :annual_income)
end
end
查看:
<%= form_for [:listing, @application] do |f| %>
的routes.rb
resources :listings do
resources :applications
end
这是我在控制器中获得的内容 - http://i.stack.imgur.com/e52T0.png。 listing_id已作为参数传递,但在保存表单时会丢失。
由ApplicationsController处理#new为HTML 参数:{&#34; listing_id&#34; =&gt;&#34; 13&#34;}
ApplicationsController处理#create as HTML 参数:{........,&#34; listing_id&#34; =&gt;&#34; 13&#34;}
用户负载(0.1ms)SELECT&#34;用户&#34;。* FROM&#34;用户&#34;用户&#34;。&#34; id&#34; =? ORDER BY&#34;用户&#34;。&#34; id&#34; ASC LIMIT 1 [[&#34; id&#34;,11]] (0.1ms)开始交易 SQL(0.4ms)INSERT INTO&#34;应用程序&#34; (.......)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)[.....,[& #34; user_id&#34;,11],[&#34; created_at&#34;,....],[&#34; updated_at&#34;,....]]
列出加载(0.1ms)SELECT&#34; listing&#34;。* FROM&#34; listing&#34;在哪里&#34;列表&#34;。&#34; id&#34; =?限制1 [[&#34; id&#34;,13]]
似乎传递了listing_id但未插入。那是为什么?
答案 0 :(得分:0)
你的新人&#39;行动不应该创造任何东西。它应该是:
@application = Application.new
你的&#34;更新&#34;操作不应该创建新记录,而是更新刚刚编辑的记录。这将成为:
@application = Application.find(params[:id])
@application.update_attributes(application_params)
答案 1 :(得分:0)
一种可能的解决方案是在视图中添加一个隐藏字段,该字段将预先填充listing_id。
如果将其添加到视图中,则可以正常工作:
<%= f.text_field :listing_id, value: params[:listing_id], class: "form-control hidden"%>.