Ruby on rails Rails如何在保存前始终保存gsub列?
在保存或更新之前,我正在尝试在我的列上创建gsub 这是我的控制器:Ruby on rails Rails如何在保存前始终保存gsub列?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在保存或更新之前,我正在尝试在我的列上创建gsub 这是我的控制器: def dansk(text) self.text.gsub('å', 'å') self.text.gsub('Å', 'Å') self.text.gsub('æ', 'æ') self.text.gsub('Æ', 'Æ') self.text.gsub('ø', '&oslas
def dansk(text)
self.text.gsub('å', 'å')
self.text.gsub('Å', 'Å')
self.text.gsub('æ', 'æ')
self.text.gsub('Æ', 'Æ')
self.text.gsub('ø', 'ø')
self.text.gsub('Ø', 'Ø')
end
def update
@photographer = Photographer.find(params[:id])
@photographer.update_attributes(params[:photographer])
@photographer.text = dansk(params[:photographer][:text])
@photographer.text = dansk(params[:photographer][:name])
!@photographer.save
flash[:notice] = " "
render_action 'edit'
end
我做错了什么?为什么文本和名称没有被gsubbed
更新:
我的助手:
def convert_html_entities(text)
text.gsub(/å/,"å")
text.gsub(/æ/,"æ")
text.gsub(/ø/,"ø")
text.gsub(/©/,"©")
text = text.gsub(/["]/, '"')
end
你应该在模型级别这样做,如果你想保持干燥的话,可以把你的dansk方法放在一个模块中
before_save :danskify
def danskify
self.text = dansk(self.text) if text_changed?
self.name = dansk(self.name) if name_changed?
end
def dansk(text)
[['å', 'å'], ['Å', 'Å'], ['æ', 'æ'], ['Æ', 'Æ'], ['ø', 'ø'], ['Ø', 'Ø']].each do |rule|
text = text.gsub(rule[0], rule[1])
end
end
在控制器中,您只需要:
def update
@photographer = Photographer.find(params[:id])
@photographer.update_attributes(params[:photographer])
flash[:notice] = " " #weird message BTW
render :edit
end
你应该在模型级别这样做,如果你想保持干燥的话,可以把你的dansk方法放在一个模块中
before_save :danskify
def danskify
self.text = dansk(self.text) if text_changed?
self.name = dansk(self.name) if name_changed?
end
def dansk(text)
[['å', 'å'], ['Å', 'Å'], ['æ', 'æ'], ['Æ', 'Æ'], ['ø', 'ø'], ['Ø', 'Ø']].each do |rule|
text = text.gsub(rule[0], rule[1])
end
end
在控制器中,您只需要:
def update
@photographer = Photographer.find(params[:id])
@photographer.update_attributes(params[:photographer])
flash[:notice] = " " #weird message BTW
render :edit
end
忽略代码中的其他奇怪问题,您需要gsub!方法注意感叹号。gsub!原地修改字符串,而gsub no感叹号返回一个新的字符串对象。忽略代码中的其他奇怪问题,您需要gsub!方法注意感叹号。gsub!原地修改字符串,而gsub no感叹号返回一个新的字符串对象。无意冒犯,但您的代码没有任何意义。控制器中是否有“def dansk”。有很多问题 如何让它工作 在丹麦,它应该是text.gsub而不是self.text.gsub。该上下文中的self是对控制器本身的引用。 多次调用text.gsub并不能满足您的需要。gsub返回一个新字符串,替换了有问题的字符,保留原始字符串不变。因此,您基本上丢失了所有这些更改,因为您只返回最后一个。应该是这样的
def dansk(text)
text.gsub('å', 'å').gsub('Å', 'Å')...
end
或者这个gsub!将其更改应用于原始字符串
def dansk(text)
text.gsub!('å', 'å')
text.gsub!('Å', 'Å')
...
text
end
最好的办法
这样,每次你对摄影师对象调用“保存”时,你不想要的角色都会自动被替换
model Photographer
...
before_validation :dansk!
...
private
def dansk!
self.text.gsub!('å', 'å')
self.text.gsub!('Å', 'Å')
...
end
end
@photographer = Photographer.find(params[:id])
@photographer.update_attributes(params[:photographer])
@photographer.save
无意冒犯,但你的代码毫无意义。控制器中是否有“def dansk”。有很多问题 如何让它工作 在丹麦,它应该是text.gsub而不是self.text.gsub。该上下文中的self是对控制器本身的引用。 多次调用text.gsub并不能满足您的需要。gsub返回一个新字符串,替换了有问题的字符,保留原始字符串不变。因此,您基本上丢失了所有这些更改,因为您只返回最后一个。应该是这样的
def dansk(text)
text.gsub('å', 'å').gsub('Å', 'Å')...
end
或者这个gsub!将其更改应用于原始字符串
def dansk(text)
text.gsub!('å', 'å')
text.gsub!('Å', 'Å')
...
text
end
最好的办法
这样,每次你对摄影师对象调用“保存”时,你不想要的角色都会自动被替换
model Photographer
...
before_validation :dansk!
...
private
def dansk!
self.text.gsub!('å', 'å')
self.text.gsub!('Å', 'Å')
...
end
end
@photographer = Photographer.find(params[:id])
@photographer.update_attributes(params[:photographer])
@photographer.save
我可以在模型或控制器中使用应用程序帮助程序吗?如果我是你,我会创建一个包含dansk方法的单独模块,然后将其包含在你的应用程序帮助程序和适当的模型中。保存模型后,它会将所有文本替换为[[å,å],[å,å],[æ,æ],[Æ,Æ],[Ø]]哇。。。不明白,更改danks方法,因为我刚刚编辑为see,我更改了dansk,它现在正在工作。唯一的问题是,当呈现编辑表单时,名称不是html转义的。我已尝试将以下内容添加到我的编辑操作:@scapector.name=raw@photographer.name但是得到错误:未定义的方法'raw'用于。。。我正在使用simple_form_for..我可以在模型或控制器中使用应用程序帮助程序吗?如果我是你,我会创建一个包含dansk方法的单独模块,然后将其包含在应用程序帮助程序和适当的模型中。保存模型时,它会将所有文本替换为[[å,å],[æ,æ],[Æ,Æ],[ø,ø]哇,哇。。。不明白,更改danks方法,因为我刚刚编辑为see,我更改了dansk,它现在正在工作。唯一的问题是,当呈现编辑表单时,名称不是html转义的。我已尝试将以下内容添加到我的编辑操作:@scapector.name=raw@photographer.name但是得到错误:未定义的方法'raw'用于。。。我使用的是简单的表格。我删除了以前的评论。这是可行的,但只是undry的名称也应该改变,而不是优化。顺便说一句,在更新æu属性后不需要保存。当我编写示例时,模型不想保存,因为我删除了以前的注释。这是可行的,但只是undry的名称也应该改变,而不是优化。顺便说一句,更新æu属性后不需要保存。当我编写示例letteæåø时,模型不想保存