mysql - 数据库中的属性未更改

标签 mysql ruby-on-rails

我正在尝试更改契约(Contract)的属性,允许用户“批准”或“拒绝”

  <%= link_to_unless_current("Approve", { decision: "approve" }) %>
  <%= link_to_unless_current("Reject", { decision: "reject" }) %>

我没有收到任何错误,但更改没有显示在我的数据库中。在我的 Rails 控制台中, Action 似乎正在传递。我还在合约 Controller 中将 :status 添加到了强参数中。

这是我的 Controller 片段

 def evaluate
    if params[:decision] == "approve"
      @contract.status = "approve"
    else params[:decision] == "reject"
      @contract.status = "reject"
    end
    @contract.save
  end

还有我的 Controller 参数

  def contract_params
      params.require(:contract).permit(:price, :start_date, :end_date, :open_ended, :lessor_contact_name, :lessor_business_name, :lessee_name, :lessee_email, :lessee_address, :lessee_business_name, :lessee_guarantor, :status)
    end

这是我的 Rails 控制台。您将看到契约(Contract)正在“批准”。 。 。它只是没有保存到数据库。

Started GET "/spaces/1/contracts/17?decision=approve" for ::1 at 2015-08-07 09:23:27 -0400
  ActiveRecord::SchemaMigration Load (0.1ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by ContractsController#show as HTML
  Parameters: {"decision"=>"approve", "space_id"=>"1", "id"=>"17"}
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 2]]
  Space Load (0.1ms)  SELECT  "spaces".* FROM "spaces" WHERE "spaces"."id" = ? LIMIT 1  [["id", 1]]
  Property Load (0.1ms)  SELECT  "properties".* FROM "properties" WHERE "properties"."id" = ? LIMIT 1  [["id", 1]]
  Contract Load (0.2ms)  SELECT  "contracts".* FROM "contracts" WHERE "contracts"."id" = ? LIMIT 1  [["id", 17]]
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 2]]
  Rendered contracts/_landlord.html.erb (6.5ms)
  Rendered contracts/show.html.erb within layouts/application (11.6ms)
  Rendered layouts/_header.html.erb (0.8ms)
Completed 200 OK in 563ms (Views: 494.5ms | ActiveRecord: 2.1ms)

这是我的路线

  resources :spaces do
    collection do
      get 'search'
    end
    resources :galleries do
      resources :pictures
    end
    resources :contracts do
      post 'evaluate', on: :member
    end
    resources :reviews
  end

任何帮助都很棒。谢谢

最佳答案

您遇到的问题与rails在数据库中更新和保存数据的方式直接相关。在您的 evaluate 方法中,您将 status 的值设置为批准或拒绝,但仅设置该值实际上并不保存该值。因此,您可以执行以下两件事之一。

1) 在您的 evaluate 方法中,您可以在设置后保存记录:

def evaluate
  if params[:decision] == "approve"
    @contract.status = "approve"
  else params[:decision] == "reject"
    @contract.status = "reject"
  end
  @contract.save
end

2) 或者您可以使用 update_attributes 它会自动为您保存:

def evaluate
  if params[:decision] == "approve"
    @contract.update_attributes(status: "approve")
  else params[:decision] == "reject"
    @contract.update_attributes(status: "reject")
  end
end

尝试一下,看看效果如何。

关于mysql - 数据库中的属性未更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866382/

相关文章:

php - 如何在 Laravel 中获取对象数组中的特定项目

php - 从mysql中随机选择但不是两次

ruby-on-rails - 模拟外部 API

ios - 使用 iOS UIWebView 时的 Rails 布局(application.html.erb)逻辑

ruby-on-rails - 如何通过 ssh 直接登录到 Rails 控制台?

mysql - 从其他表查询检查状态

mysql - 从多个表中选择行

php - 更改下拉菜单执行 jquery 函数和 sql 查询

ruby-on-rails - 使用正则表达式忽略隐藏文件

ruby-on-rails - 无法在我的本地主机上运行 stripe-ruby-mock