我有一个:name属性,用于链接到用户的显示配置文件。
我需要在数据库中存储没有间距所以我使用了Gsub。
def name=(value)
write_attribute(:name, value.gsub(/\s+/, ""))
end
但是在某些Show Page上再次显示该值
<%= link_to @show.name, @show %>
名称get显示没有Spaces。
我试过
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
答案 0 :(得分:1)
如果空格是问题,为什么不将它们转换为下划线然后使用帮助器来显示?
def name=(value)
write_attribute(:name, value.gsub(/\s+/, "_"))
end
然后,您可以创建一个仅用于打印/显示名称的辅助方法。
app/helpers/users_helper.rb
在这个帮手中加入这样的东西:
module UsersHelper
def pretty_name(user)
user.name.gsub('_', ' ')
end
end
<%= pretty_name(@user) %>
如果在名称字段中使用分隔符不是一个选项,那么您应该考虑修改users
表以使first_name
,middle_name
,last_name
等< / p>
答案 1 :(得分: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
模型中使用Show
方法返回username
(即name
并删除了所有空格)。这导致find
方法中的问题,因为DB中的值包括空格并且被搜索的值没有任何空格,因此需要使用DB特定函数,例如,在MySQL的情况下where("replace(name, ' ', '') = ?", user_name)
。由于OP在开发和生产中使用不同的数据库,即开发中的SQLite和生产中的PG。因此,建议OP使用FriendlyId gem。