【问题标题】:Using best_in_place gem how do I specify a nil value for a select tag?使用 best_in_place gem 如何为选择标签指定 nil 值?
【发布时间】:2012-11-30 17:17:06
【问题描述】:

this question 上的答案为我提供了一个很好的路线图,说明如何使用关联集合中的数据生成选择标签。

这很好用,一切都很好。

我现在遇到的问题是,如何处理空集合?

使用常规的:type => :input,我可以指定:nil => "Some nil message here"

但这似乎不适用于集合,更糟糕的是,当集合中没有任何内容时,它似乎显示了一些整数(即12)。我假设这些是集合中先前显示的对象的 ID,但出于显而易见的原因,这没有多大意义。

关于如何使用此 gem 处理空集合的任何想法?

谢谢。

编辑 1:

另一种方法是将我原来的 best_in_place 辅助标记放在 if 语句中,以便当集合不为零时。但是,当它为空白时,用户如何编辑它?也许没有办法处理这个问题,因为这会涉及在集合中创建新记录。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 best-in-place


    【解决方案1】:

    我对选择标签中的空选项使用“解决方法”,它可以帮助你:

    :type => :select, :collection => @my_colletion || [[I18n.t('common.none'), -1]]
    

    @my_colletion 为 nil 时,它会显示一个名为 'None' 且 id = -1 的选项(这在后端处理起来还不错)。

    这部分代码假定@my_collection 是一个数组,如[ [key, value], [key, value], ... ] OR nil。

    不过,如果您希望您的 MyModel.all 集合符合 best_in_place 的条件,您可以使用以下内容:

    @my_collection = MyModel.all.map{ |object| [object.name, object.value] } 
    # => this returns an array like [ [key, value], [key, value], ... ]
    # => returns an empty array (NOT nil) if there is no entry in the DB
    

    关于-1 id: 将 -1 id 用作“none”很容易,因为您不需要显式处理值 nil(测试等)。使用 -1 id,您可以使用以下内容:

    MyModel.where(id: params[:id]).first # => Returns the first object that has the params[:id]
    # if params[:id] is -1, it will return nil and not raise an error.
    

    希望对你有帮助:)

    【讨论】:

    • 我喜欢这个解决方案。我将如何处理后端的-1
    • 另外,出于好奇,您如何创建@my_collection?我尝试使用常规的 ActiveRecord 对象,但它需要整个 [[key, value]] 格式,而传统的 @my_collection = MyModel.all 没有提供给我。
    • 谢谢。这确实有很大帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 2012-12-16
    • 2016-09-26
    • 2013-11-08
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    相关资源
    最近更新 更多