【问题标题】:Scaffold and Array type columnScaffold 和 Array 类型列
【发布时间】:2012-03-22 11:30:48
【问题描述】:

我已经使用 rails 脚手架生成器创建了模型、控制器和视图:

rails g scaffold Todo description:string tags:array

所以我有模型:

class Todo
  include Mongoid::Document
  field :description, :type => String
  field :tags, :type => Array
end

和控制器:

def create
    @todo = Todo.new(params[:todo])
    @todo.save

但是这种情况(自动生成的代码)我收到错误消息,告诉我类似:

tags field must be array datatype, but you're trying to use string

所以我已经修复了控制器:

def create
    #@todo = Todo.new(params[:todo])

    @tmp = params[:todo]
    @tmp["tags"] = @tmp["tags"].split(',')
    @todo = Todo.new(@tmp)

我只是想知道是否有更好的方法来解决我的错误?

【问题讨论】:

    标签: ruby-on-rails mongodb mongoid


    【解决方案1】:

    取决于您的视图的结构。据我所知,必须有一个文本输入或其他东西,您可以在其中输入标签,用逗号分隔。难怪它以字符串的形式出现!在这种情况下,您的解决方法是正确的。不过,我会添加前导和尾随空格的去除。

    @tmp["tags"] = @tmp["tags"].split(',').map(&:strip)
    

    要在 params 中获得一个真正的数组,您的 HTML 必须如下所示:

    <input type='text' name='tags[]' />
    <input type='text' name='tags[]' />
    <input type='text' name='tags[]' />
    

    这些输入中的每一个都包含一个标签。

    【讨论】:

    • 是否可以设置rails,以便脚手架生成器生成一组输入标签(如您的示例)?
    猜你喜欢
    • 1970-01-01
    • 2017-04-03
    • 2022-06-21
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多