我想更新member_id,触发更新:location_stock。
我已经有了这些自定义操作 的 costumes_and_cost_records_controller.rb :
def rent
@costumes_and_cost_record = CostumesAndCostRecord.find(params[:costumes_and_cost_record_id])
end
def rent_method
@costumes_and_cost_record = CostumesAndCostRecord.find(params[:costumes_and_cost_record_id])
@costumes_and_cost_record.update_attributes(:member_id => params.permit(:member_id), :location_stock => true)
redirect_to @costumes_and_cost_record
end
我在视图中使用了简单的表单 rent.html.erb :
<%= simple_form_for @costumes_and_cost_record do |f| %>
<%= f.association :member, :label => "Member", label_method: :to_s, value_method: :member_id, include_blank: true %>
<%= f.submit "Rent", :controller => :costumes_and_cost_records, :action => :rent_method, :method => :put, :member_id => :member %> <%# updates only member_id, doesnt update :location_stock %>
<%# link_to "Rent", :controller => :costumes_and_cost_records, :action => :rent_method, :method => :put, :member_id => :member_id %> <%# updates :location_stock, sets member_id = NULL %>
<% end %>
现在如果我使用提交按钮:member_id更新但控制器没有更新:location_stock。
如果我使用link_to :location_stock
更新,但:member_id
设置为NULL。
我想更新这两个属性。我应该使用提交按钮或link_to以及如何解决此问题吗?
我设置了 routes.rb ,以便在视图中同时使用link_to和submit方法:
resources :costumes_and_cost_records do
post 'show'
get 'rent'
get 'rent_method'
end
非常感谢任何帮助。
答案 0 :(得分:1)
如果我理解正确,您需要调用rent_method来更新member_id
put 'rent_method'
查看更改
<%= simple_form_for @costumes_and_cost_record, method: :put, url: [@costumes_and_cost_record, :rent_method] do |f| %>
<%= f.association :member, :label => "Member", label_method: :to_s, value_method: :member_id, include_blank: true %>
<%= f.submit "Rent" %>
<% end %>
控制器
def rent_method
@costumes_and_cost_record = CostumesAndCostRecord.find(params[:costumes_and_cost_record_id])
@costumes_and_cost_record.update_attributes(:member_id => member_params[:member_id], :location_stock => true)
redirect_to @costumes_and_cost_record
end
def member_params
params.require(:costumes_and_cost_record).permit(:member_id)
end
答案 1 :(得分:0)
<强>路线强>
首先,如果您希望member_id
出现,那么您最好使用nested routes
,如下所示:
#config/routes.rb
resources :member do.
resources :costumes_and_cost_records do
... #-> domain.com/members/2/costumes_and_cost_records/
end
end
这将为您提供链接中params[:member_id]
所需的值:
<%= link_to "Member", member_costumes_and_cost_records_path(member_id) %>
<强>表格强>
在您的表单中,您需要能够正确定义url
(Rails自然会提交给基于CRUD的操作,而不是自定义操作):
<%= simple_form_for @costumes_and_cost_record, url: your_rent_method_path, method: :patch do |f| %>
这将提交到rend_method
路径,或您要求的任何自定义操作。
-
我个人会将您在控制器中的任何活动保持为单一操作 - 这将允许您将所有业务逻辑保留在一个操作中,这对于MVC programming pattern
是首选答案 2 :(得分:0)
花了我3天但我终于解决了这个问题。 Ruslan Kyrychuk的答案很好,但问题是我没有遵循Rails命名惯例。我有外键:costumes_and_cost_records.member_id
和主键:member.member_id
所以我将member.member_id
重命名为member.id
并修复了问题。