小编Sha*_*aun的帖子

从超类调用子类方法

前言:这是在Rails应用程序的上下文中.然而,问题是Ruby特有的.

假设我有一个Media对象.

class Media < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

我在几个子类中扩展了它:

class Image < Media
  def show
    # logic 
  end
end

class Video < Media
  def show
    # logic 
  end  
end
Run Code Online (Sandbox Code Playgroud)

Media类中,我想show从适当的子类调用实现.所以,从Media,如果self是a Video,那么它将调用Video的show方法.如果self是一个Image,它将调用Image的show方法.

来自Java背景,突然出现的第一件事是"在超类中创建一个抽象方法".但是,我在几个地方(包括Stack Overflow)读过抽象方法不是在Ruby中处理这个问题的最佳方法.

考虑到这一点,我开始研究类型转换,并发现这也是Java思维的遗留物,在处理Ruby时我需要消除我的想法.

打败了,我开始编写看起来像这样的东西:

def superclass_method
  # logic
  this_media = self.type.constantize.find(self.id)
  this_media.show      
end
Run Code Online (Sandbox Code Playgroud)

我已经在Ruby/Rails编写了一段时间了,但由于这是我第一次尝试这种行为并且现有资源没有直接回答我的问题,我想从更多经验丰富的开发人员那里获得有关如何完成的反馈我的任务.

那么,如何从Rails中的超类调用子类的方法实现?有没有比我最终(几乎)实施更好的方式?

ruby oop ruby-on-rails

17
推荐指数
2
解决办法
1万
查看次数

升级到PHP 5.3后显示MySQL数据库结果时解决错误的字符编码

问题说明

在将我们的开发服务器上的PHP从5.2升级到5.3之后,我们遇到了一个问题,即在尝试显示俄语字符时,从我们的数据库请求并显示在网页上的数据显示编码不正确.

环境

  • 开发操作系统:Debian GNU/Linux 6.0
  • 开发PHP:5.3.5-0.dotdeb.1
  • Live MySQL:Distrib 5.1.49

细节

在PHP 5.3中,用于与MySQL数据库交互的默认客户端库从libmysql更改为mysqlnd,这似乎是我们遇到的问题的原因.

我们使用以下代码连接到数据库:

$conn = mysql_pconnect('database.hostname', 'database_user', 'database_password');
$mysql_select_db('database', $conn);
Run Code Online (Sandbox Code Playgroud)

存储在我们数据库中的数据使用UTF-8编码进行编码.通过命令行客户端连接到数据库并运行查询,确认数据完好无损且编码正确.但是,当我们在PHP中查询数据库并尝试显示完全相同的数据时,它会变得乱码.在这种特定情况下,我们试图显示俄语字符,结果是非英语,非俄语字符: 乱糟糟的

我们收到的响应标头确认内容类型是UTF-8:

响应标头

我们测试显示之前的字符串与mb_detect_encoding严格模式以及mb_check_encoding,并被告知该字符串显示前一个UTF-8字符串.我们还使用mysql_client_encoding来测试客户端编码,它还表明字符集是UTF-8.

在进行研究时,我们发现了一些尝试解决此问题的建议:

header("Content-type: text/html; charset=utf-8");
mysql_set_charset('utf8');
mysql_query("SET SESSION character_set_results = 'UTF8'");
mysql_query('SET NAMES UTF8', $conn);
Run Code Online (Sandbox Code Playgroud)

我们甚至尝试过utf8_encode:

utf8_encode($string);
Run Code Online (Sandbox Code Playgroud)

但是,这些解决方案都没有奏效.

用完选项后,我们将开发系统上的MySQL升级到Distrib 5.1.55.在升级之后,当我们连接到开发数据库时,一切都正确显示.当然,当我们连接到我们的实时数据库时,它会继续显示不正确.

理想情况下,我们希望在不升级生产服务器上的MySQL的情况下解决此问题,除非我们可以验证无法正常工作的原因以及升级为什么要修复它.如何在不升级MySQL的情况下解决此编码问题?或者,为什么MySQL升级修复了这个问题?

php mysql character-encoding

10
推荐指数
1
解决办法
2万
查看次数

为什么在Web开发中经常使用MySQL?

我经常想知道为什么MySQL变得如此受欢迎.有什么想法吗?它成功背后的具体原因是什么?(请保持答案分析)

mysql database rdbms popularity

6
推荐指数
1
解决办法
2167
查看次数

删除字符串的最后一个字符,如果它是$ variable

我已经制作了一个小脚本来将标题转换为友好的url.

即:

'I am a title'
Run Code Online (Sandbox Code Playgroud)

'I_am_a_title'
Run Code Online (Sandbox Code Playgroud)

我的脚本基本上通过并将空格,撇号,逗号等等转换为下划线.

问题是,有时我的网址最终会像这样:

'i_am_a_title_'
Run Code Online (Sandbox Code Playgroud)

带尾随下划线......

所以我想,添加一点点来查看最后一个字符是否是最终结果的下划线,如果是,则交换它.

我查看了strrchr()函数,但我似乎遇到了自己理解的墙.

这种事情是如何完成的?

php string

3
推荐指数
2
解决办法
9171
查看次数