rails 4.1枚举不从视图中保存

时间:2014-01-19 09:16:54

标签: ruby-on-rails enums ruby-on-rails-4

Rails 4.1提供了枚举功能。我查了一下它似乎在rails控制台上工作得很好。当我尝试通过我的控制器将视图中的数据持久保存到数据库时,我收到以下错误

'注册'不是有效的stream_type

以下是我的课程

class Stream < ActiveRecord::Base
  enum stream_type: { sales: 1, registration: 2, student: 3 }

  belongs_to :course_presentation

  has_many :subscriptions
  has_many :contacts, :through => :subscriptions

  validates :course_presentation_id, :stream_type, presence: true 
end

以下是我用来保存的代码

@stream = Stream.new(stream_params)

def stream_params
      params.require(:stream).permit(:stream_type, :course_presentation_id, :is_active, :created_by_user_id, :updated_by_user_id)
    end

下面是视图代码

<%= f.label :stream_type %><br>
    <%= f.collection_select :stream_type, StreamType.order(:name), :name, :name, include_blank: "<-- select -->" %>

有什么想法吗?我只是无法让它运作

1 个答案:

答案 0 :(得分:7)

我想到了这一点,虽然答案并不完全满意。存储枚举值的下拉列表是大写的。例如“注册”。当它试图保存它无法找到“注册”,但它可以找到“注册”。使用正确的案例保存枚举就可以了。

无论如何,我希望我可以使用与散列键相对应的整数,但这似乎不起作用。

<强>被修改

解决这个问题的另一种方法是......

params.require(:stream).permit(:stream_type, :course_presentation_id, :is_active, :created_by_user_id, :updated_by_user_id).tap do |w|
      w[:stream_type] = w[:stream_type].to_i if w[:stream_type]
end

我发现的另一篇文章

Alternative solution