2

attr_accessor定义非常大的常量或符号时应该怎么做?例如,像这样:

ATTRIBUTES = %w(id name full_name owner private html_url description fork url forks_url keys_url collaborators_url teams_url hooks_url issue_events_url events_url assignees_url branches_url tags_url blobs_url git_tags_url git_refs_url trees_url statuses_url languages_url stargazers_url contributors_url subscribers_url subscription_url commits_url git_commits_url comments_url issue_comment_url contents_url compare_url merges_url archive_url downloads_url issues_url pulls_url milestones_url)

attr_accessor :name, :login, :full_name, :owner, :private, :html_url, :description, :fork, :url

在课堂上是可怕的。这是最好的方法吗?我想知道是否还有其他方法可以提高可读性。

4

4 回答 4

6

改变一定宽度的线条:

ATTRIBUTES = %w[
  id name full_name owner private html_url description fork url forks_url
  keys_url collaborators_url teams_url hooks_url issue_events_url events_url
  ...
]

或者如果您不需要保存行,则将每个项目放在单独的行上可能很容易:

ATTRIBUTES = %w[
  id name
  full_name
  owner
  private
  html_url
  ...
]

或者如果你有时间格式化,那么你可能想要制作几列并对齐它们:

ATTRIBUTES = %w[
  id                 name                full_name          owner             
  private html_url   description fork    url                forks_url
  keys_url           collaborators_url   teams_url          hooks_url
  issue_events_url   events_url          ...
]

%i[...]在 Ruby 2.0 中,为符号数组引入了一个新的文字表达式:

attr_accessor *%i[
  name
  login
  full_name
  owner
  private
  ...
]
于 2013-02-26T18:49:38.420 回答
0

您可以使用YAML文件或设置配置文件。然后在初始化的时候,就可以赋值了。

示例 YAML:

#configuration file 
config: 

  FIRST_NAME: "Bob"
  USER_ID: "abc13324"
  LAST_NAME: "Smith"
  Etc....

示例红宝石:

class NewClass
     def initialize
         configFile = YAML.load_file("pathToYourYamlFile.yaml")
         @firstName = configFile['config']['FIRST_NAME']
         @lasttName = configFile['config']['LAST_NAME']
         @user_id = configFile['config']['USER_ID']
         etc....
     end
 end 

这最适合在程序中设置常量。然后,您可以从任何文件访问它们。

于 2013-02-26T18:25:51.340 回答
0

多年来,通过反弹各种语言,我开始使用这种布局:

ATTRIBUTES = %w(
  archive_url assignees_url
  blobs_url branches_url

  collaborators_url comments_url commits_url compare_url 
  contents_url contributors_url

  description downloads_url
  events_url
  fork forks_url full_name
  git_commits_url git_refs_url git_tags_url
  hooks_url html_url
  id issue_comment_url issue_events_url issues_url
  keys_url
  languages_url
  merges_url milestones_url
  name
  owner
  private pulls_url

  stargazers_url statuses_url subscribers_url
  subscription_url

  tags_url teams_url trees_url
  url
)

%w(
  description
  fork full_name
  html_url
  login
  name
  owner
  private
  url
).each { |a| attr_accessor a.to_sym }

行按字母顺序排序,行上的每个单词都按字母顺序排序。

如果某一行变得太长,我会将其换行并在它们之前和之后添加空行以在视觉上分隔它们,保持行的类型和行中的单词。

大多数编辑器使排序变得容易,这是清理混乱列表的第一步,这很痛苦,之后保持它的维护也没什么大不了的。我使用具有sort命令的 vim,但我将其视为“记事本”替代品的 Sublime Text 2 也可以。

我这样做是为了维护。我发现扫描已排序的行要容易得多,即使它与其他行在列中的间距不均匀,也比我试图找到显示在漂亮的'n整洁列中的排序顺序不同的东西要容易得多。整洁很重要,但秩序使我的头免受伤害。试图编辑列中的表格并让它全部搞砸,因为我添加了一个单词很快就会变老,所以列被扔掉了,我只是排序。我敢肯定,当我告诉他们这样做时,一开始会惹恼我的同事,但他们很快就看到了好处,这让我闭嘴了。:-)

随着 Ruby v2.0 的添加%i,第二个示例可以更改为:

%i(
  description
  fork full_name
  html_url
  login
  name
  owner
  private
  url
).each { |s| attr_accessor s }

这不是一个很大的变化,但它有点清洁。

于 2013-02-26T20:56:05.380 回答
-2

在我看来,所有这些都是表列名。

如果是,则不需要 attr_accessor ,rails 会自动提供对它们的访问。

你可以打电话object.name, object.html_url等等。

你能确认是否是这种情况

于 2013-02-26T18:55:26.247 回答