【问题标题】:Rails Edit Class form Not Saving to DBRails 编辑类表单不保存到数据库
【发布时间】:2014-11-25 20:22:09
【问题描述】:

在 Rails 中,管理员可以使用以下表单来编辑“exchange”类的实例:

<%= 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 %>

此表单正在 exchanges/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

我的路线.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

我知道“更新”控制器操作已成功调用,因为单击提交按钮后,我将被重定向到相关交换的视图页面。问题是数据库中该交换的记录没有更新。

【问题讨论】:

  • 你能发布你的exchange_paramsroutes.rb吗?
  • 添加了我的routes.rb,exchange_params不就是表格中列出的参数吗?
  • 不,使用 Rails 4 和强大的参数,您必须定义要接受的参数。我会发布你的答案。

标签: ruby-on-rails


【解决方案1】:

您需要将控制器中的参数作为私有方法列入白名单。

private

def exchange_params
  params.require(:exchange).permit(:status, :status_1, :status_2)
end

根据上述情况,我假设您的模型 Exchange 在数据库中有一个表 exchanges 并且该表具有列 statusstatus_1status_2 .

你可以阅读更多here

【讨论】:

  • 谢谢!您的假设是正确的,它现在按预期工作。
猜你喜欢
  • 2016-03-24
  • 1970-01-01
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
相关资源
最近更新 更多