Rails - 存储社交媒体链接的位置?

时间:2014-04-06 08:08:09

标签: ruby-on-rails ruby-on-rails-3

社交媒体网址应该位于何处?现在我想把它放在lib中。这也是正确的方法,还是应该把它放在帮手或其他东西中。我觉得我将来可能会从外面看到这一点。

另外,如果有一个比#34; Marketing"更好的名字,我很乐意替换它

module MyApp
  class Marketing
    def self.facebook_url
    end

    def self.twitter_url
    end

    def self.tumblr_url
    end

    def self.blog_url
    end
  end
end

测试:

  scenario 'with MyApp contact information' do
    visit root_path
    expect(page).to have_content(MyApp::Marketing.blog_url)
    expect(page).to have_content(MyApp::Marketing.facebook_url)
    expect(page).to have_content(MyApp::Marketing.twitter_url)
    expect(page).to have_content(MyApp::Marketing.tumblr_url)
  end

2 个答案:

答案 0 :(得分:0)

Rails对此没有意见,但是,应用程序助手对我来说似乎更合适。

为什么呢? Rails的UrlHelper类似乎是最近的亲戚,但除此之外,它更像是一种直觉。但是,帮助程序应该很小,所以如果你需要很多代码来构建URL,你可能想要将繁重的工作转移到一个单独的类并为所有人编写一个app helper(例如social_url:facebook,...) 。你把这个支持类放在哪里,lib似乎是个好地方,其他人更喜欢app / classes。我经常将可重复使用的,混乱的代码提取到出售的宝石供应商/宝石中,这使得应用测试套件保持苗条和快速。

答案 1 :(得分:0)

如果您没有找到确凿的答案,我们已使用rails-config gem创建了一系列重要信息:

#config/settings.yml
social:
  facebook: "url"
  twitter: "url"
  linkedin: "url"
  youtube: "url"
  fusion: "url"

然后我们用一个简单的帮助器调用数据:

  #app/helpers/application_helper.rb
  def setting(option, type)
    record = Option.find_by name: "#{option}_#{type}"
    return record ? record.value : Settings.send(option).send(type)
  end

正如您所看到的,我们使用数据库提供了一些灵活性,但底线是Settings.social.youtube等仍然是默认选项