【问题标题】:Rails: Saving Input whithout SpacesRails:在没有空格的情况下保存输入
【发布时间】:2013-08-25 08:17:27
【问题描述】:

我正在寻找如何在没有空格的情况下保存我的输入。

我通过

收集表单上的输入
<%= f.input :name %>

并将其也用于链接

localhost:3000/users/:name

问题是,如果有人在他的名字中使用空格,则链接会变得很丑陋,带有 % 符号等。

如何在没有空格的情况下存储输入?

例如

输入是:Hey im John 另存为:HeyimJohn

我的模特:

class Show < ActiveRecord::Base

    belongs_to :user

    validates :name, :presence => true, :uniqueness => true

    # Show Cover
    has_attached_file :cover, styles: { show_cover: "870x150#"}
    validates_attachment :cover,
                                             content_type: { content_type: ['image/jpeg', 'image/jpg', 'image/png'] },
                                             size: { less_than: 5.megabytes }


    def to_param
        name
    end

end

【问题讨论】:

    标签: ruby-on-rails validation input ruby-on-rails-4


    【解决方案1】:

    使用 gsub:

    > "Hey im John".gsub(/\s+/,"")
     => "HeyimJohn"
    

    要更新哈希,您可以这样做:

    params_hash.each { |k, v| params_hash[k] = v.gsub(/\s+/, "") 
    

    更新:

    要更新模型中的特定属性,您可以在模型中定义一个设置器来删除所有空格:

    def my_attribute=(value)
      write_attribute(:my_attribute, value.gsub(/\s+/,""))
    end
    

    【讨论】:

    • 我对 Rails 比较陌生。你能解释一下我必须把 gsub 放在哪里吗?
    • 我正要说的,您是否尝试更新参数哈希以便所有输入或选择性输入?如果都是输入,那么在收到参数散列后在控制器中执行此操作可能会更快,如果它是选择性的,那么您可以在模型中执行此操作。
    • 仅用于选择性输入,即 :name 输入。我的模型中必须包含什么?
    • 你可以在你的模型中定义一个setter,def name=(value) self.name = value.gsub(/\s+/, "") end
    • 我收到“堆栈级别太深”错误。我用我的模型编辑了我的问题。
    猜你喜欢
    • 2014-05-20
    • 1970-01-01
    • 2021-09-24
    • 2016-11-22
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多