ruby 尝试将枚举放入rails 5中的选择表单帮助器类

fcwjkofz  于 2022-11-22  发布在  Ruby
关注(0)|答案(2)|浏览(106)

我已经

<%= f.select(:status, [["active", 0], ["inactive", 1], ['cancelled', 2]]) %>

而最初

<%= f.select(:status, collection: Subscription::STATUSES) %>

但两者都不起作用。
这里是订阅.rb

class Subscription < ApplicationRecord
  belongs_to :user
  belongs_to :plan

  STATUSES = {active: 0, inactive: 1, cancelled: 2}
  enum status: STATUSES
end

每次我这样尝试,我得到的是:

private method `select' called for nil:NilClass

每次我尝试遵循指南时,我都会得到另一个失败语法的消息。
这件事让我很头疼,我要留到明天早上。
你可能想看看

<%= form_tag subscription_path, id: "subscription-form" do |f| %>

因此:

match "plans/subscriptions" => "subscriptions#new", as: "subscription", via: [:get, :post]
iswrvxsc

iswrvxsc1#

如果你想在select from enum => status中得到值,试试这个

= f.select :status, Subscription.statuses.keys.map { |w| [w.humanize, w] }

或由常数STATUS

= f.select :status, Subscription::STATUSES

编辑

作为form_tag的@spickermann注解,您可以这样使用

<%= select_tag :status, options_for_select(Subscription.statuses.map {w| [w.humanize, w]}) %>
k3bvogb1

k3bvogb12#

您在Rails 7中需要的是:

<%= form.select :status, Subscription.statuses.keys %>

订阅状态是自动设置的,不需要通过以下方式保持不变:

enum status: {"active"=>0, "inactive"=>1, "cancelled"=>2}

相关问题