改变rails中用户输入的最佳方法

时间:2015-05-15 18:05:05

标签: ruby-on-rails ruby serialization

我目前得到的是一个textarea,它接受逗号分隔的单词串,我想在数据库中序列化为数组。

我有一个序列化数组的模型

class Ipsum < ActiveRecord::Base
  serialize :words, Array
  validates :title, presence: true, uniqueness: true
end

目前在我的控制器中,我从文本区域获取用户输入,并将类型从字符串转换为数组,执行以下操作。

class IpsumsController < ApplicationController

  def create
    params[:ipsum][:words] = params[:ipsum][:words].split(',')
    @ipsum = Ipsum.new(ipsum_params)

    if @ipsum.save
      redirect_to @ipsum
    end
  end

  private

    def ipsum_params
      params.require(:ipsum).permit(:title, :author, :words)
    end
end

这可以按预期工作,但我想知道是否有更好的方法来做到这一点,即某种before_serialization回调,或某种形式的序列化。

这里也是目前的形式,我使用ruby-slim。

= form_for(@ipsum) do |f|
  = f.label :title
  = f.text_field :title

  = f.label :words
  = f.text_area :words, value: ''

  = f.submit 'Submit'

1 个答案:

答案 0 :(得分:0)

在您的模型中,您可以使用:

before_save :split_words

def split_words
  self.words = words.split ','
end

从控制器中删除:

params[:ipsum][:words] = params[:ipsum][:words].split(',')