我有一个表单,它应该更新一个嵌套属性(租户(用户)托管模型),我在获得正确的语法时遇到了问题。
_escrow_update_form.html.erb
<%= form_for @tenant,url: tenants_escrow_path,方法::修补程序,验证: true do \a颇具%> <%= a.fields_for :escrow do \f\x %> <%= f.label :new_amount_to_escrow %> <%= f.number_field(:escrow_payment) %> <% end %> <%= a.submit(“完成!返回到仪表板“,{class:"btn btn-成功btn-lg",:id=> 'goalButton'}) %> <% end %>
escrow_controller
def update @tenant = current_tenant if @tenant.escrows.update( escrow_params ) redirect_to tenants_dashboard_path,注意:“您的代管付款信息已更新”否则redirect_to tenants_escrow_path,通知:“您的托管付款未更新,请重试”结束私有def escrow_params params.permit(:escrow_payment,:home_value,:total_saved) end end
routes.rb
namespace :tenants do
resources :escrow代管模型
class Escrow
include Mongoid::Document
#associations
belongs_to :tenant租户模型
class Tenant
include Mongoid::Document
has_one :escrow, autosave: true, dependent: :destroy
accepts_nested_attributes_for :escrow模型不会更新。它给出了错误“NilClass的未定义方法‘`update’”
发布于 2018-10-01 05:04:04
“0:NilClass的未定义方法‘`update’”
这意味着@tenant没有任何escrow
在_escrow_update_form.html.erb中,如果escrow为0,则构建@tenant.escrow
<% escrow = @tenant.escrow ? @tenant.escrow : @tenant.build_escrow %>
<%= form_for @tenant, url: tenants_escrow_path, method: :patch, validate: true do |a| %>
<%= a.fields_for :escrow, escrow do |f| %>
<%= f.label :new_amount_to_escrow %>
<%= f.number_field(:escrow_payment) %>
<% end %>
<%= a.submit("Done! Go back to the Dashboard", {class: "btn btn-success btn-lg", :id=> 'goalButton'}) %>
<% end %>在强参数白名单嵌套参数中
def update
@tenant = current_tenant
if @tenant.update(escrow_params) #updating @tenant will automatically update the corresponding escrow
redirect_to tenants_dashboard_path, notice: "Your escrow payment informaton has been updated"
else
redirect_to tenants_escrow_path, notice: "Your escrow payment was not updated, try again"
end
end
private
def escrow_params
params.require(:tenant).permit(:escrow_payment, :home_value, :total_saved, escrow_attributes: [])
end
endhttps://stackoverflow.com/questions/52584352
复制相似问题