-1

ユーザーのショー プロファイルへのリンクに使用する :name 属性があります。

データベースへの保存を間隔なしで行う必要があったため、Gsub を使用しました。

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

しかし、その値をいくつかの表示ページに再度表示すると、

<%= link_to @show.name, @show %>

名前はスペースなしで表示されます。

私は試した

raw(@show.name)

しかし、これもうまくいきませんでした。

リンクのスペースなしを維持し、どのページにもスペースを表示するにはどうすればよいですか?

私のモデル:

class Show < ActiveRecord::Base

    belongs_to :user

    validates :name, :presence => true, :uniqueness => true
    validates :announcement, length: { maximum: 250 }

    # 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

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

end
4

2 に答える 2

1

主に表示しています。さまざまなコントローラーで。

表示のみの場合は、スペースを取り除かないでください。実際の名前usernameを保存してから、名前からスペースを削除するメソッドを定義します。

次のようなものが機能するはずです。

# Model
class Show < ActiveRecord::Base
    # Returns name removing all spaces
    def username
      self.name.gsub(/\s+/, "")
    end

    # Remove just the leading and trailing white spaces
    def name=(value)
        write_attribute(:name, value.strip)
    end
end

次に、コントローラーで:

<%= link_to @show.username, @show %>

アップデート:

OPとチャットした後、彼が返されたモデルでto_paramメソッドを使用していることを理解しました(つまり、すべてのスペースが削除されました)。DB の値にスペースが含まれていて、検索対象の値にスペースがなかったため、メソッドで問題が発生しました。その結果、MySQL の場合など、DB 固有の関数を使用する必要がありました。OPは開発と本番で異なるデータベースを使用しているため、つまり、開発ではSQLite、本番ではPGを使用しています。そのため、異なるデータベース間で機能するソリューションを作成する代わりに、OP はFriendlyId gemを使用することを推奨しました。Showusernamenamefindwhere("replace(name, ' ', '') = ?", user_name)

于 2013-08-25T19:44:52.947 に答える