【问题标题】:is it correct to add self like in this case in ruby on rails在这种情况下在 ruby​​ on rails 中添加 self 是否正确
【发布时间】:2016-07-25 20:54:37
【问题描述】:

我正在尝试使其可以在我的应用中重新发布帖子...我在 Youtube 视频中看到此代码..

class Pin < ActiveRecord::Base
validates_presence_of :bio
belongs_to :user

mount_uploader :image, PictureUploader

def repost
    repost_pin = self.dup
    repost_pin.save
end

在这里使用 self 是否正确?有没有可能改成这样:

def repost
    dub
end

最后 repost 将在实例变量 @post(@post = Post.find(params[:id]) ) 上调用......也许我在这里误解了一些东西......任何人都可以帮忙吗?

【问题讨论】:

  • 您问是否可以更改为第二个repost 方法,为什么不尝试将其更改为该方法并运行您的应用程序?如果有任何错误并发布?
  • 我想知道的主要事情是,如果像这里使用的方式那样使用 self 是正确的......它是 ruby​​ 中的正确方式还是什么......

标签: ruby-on-rails ruby ruby-on-rails-4 self


【解决方案1】:

当您从上下文中明确您正在读取当前实例的属性或调用其方法时,您可以跳过self

在写作时你应该更加小心:

def write
  test = 'test'
end

将创建一个局部变量test,即使存在同名的属性。或者,这个:

def write
  self.test = 'test'
end

将值分配给当前实例的名为test的属性。

在您的示例中,您可以跳过 self,因为 dupObject 的一种方法,因此在当前上下文中可用作有效标识符:

def repost
    repost_pin = dup
    repost_pin.save
end

也就是说,显式使用self 并不是错误,例如,标记您使用对象的属性或方法的意图。 Ruby style guide 不推荐。

【讨论】:

  • 很好的解释...谢谢您的帮助 ;) 只是要清楚...当在 @post 上调用 repost 时...会是这样的:repost_pin = @post.dup??我说的对吗?
  • 当我尝试你给它投票时,我收到一条消息说我的重复次数少于 15 次,所以我不能投票
  • 这不是关于投票,而是关于接受。请阅读Accepting Answers: How does it work?
  • 值得注意的是,有许多 Ruby 风格指南,但没有一个是规范的。他们的建议确实有很大重叠,但在重要方面存在差异。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多