在Rails中,我有以下表格供管理员用来编辑“交换”类的实例:
<%= form_for(@exchange) do |f| %>
<div class="form-group">
<%= f.label :status %><br>
<%= f.text_field :status, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :status_1 %><br>
<%= f.text_field :status_1, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :status_2 %><br>
<%= f.text_field :status_2, class: "form-control" %>
</div>
<div class="form-group">
<%= f.submit "Submit Changes", class: "btn btn-primary" %>
</div>
<% end %>
此表单正在 deals / edit.html.erb
上呈现我有以下控制器操作:
def edit
@exchange = Exchange.find(params[:id])
end
def update
@exchange = Exchange.find(params[:id])
@exchange.update(exchange_params)
respond_with @exchange
end
我的routes.rb:
resources :exchanges do
patch :update_ordid, on: :member
patch :update_ordlnk, on: :member
post :mark_arrival, on: :member
post :close_exchange, on: :member
end
我知道正在成功调用“更新”控制器操作,因为在单击提交按钮后,我将被重定向到相关交换的视图页面。问题是数据库中该交换的记录没有更新。
答案 0 :(得分:2)
您需要将控制器中的参数作为私有方法列入白名单。
private
def exchange_params
params.require(:exchange).permit(:status, :status_1, :status_2)
end
通过上述内容,我假设您的模型Exchange
在数据库中有一个表exchanges
,该表包含status
列,{ {1}},status_1
。
您可以阅读更多here。