调试Rails狂欢。可能与数据库有关

时间:2012-04-15 12:12:44

标签: ruby-on-rails spree

我的问题只是遥远的。

我的问题是,在状态控制器中,数据库中不存在国家/地区

但是如果我rails c,则在遥控器上,国家有效。国家与国家的关系有效。反之亦然,他们都有很多关于这两者的信息。

战场(SFW):

class Admin::StatesController < Admin::ResourceController
  #belongs_to :country
  # ^^ This default line with spree will break the app because once this controller is touched, Country is nil in this part of the app.
  before_filter :load_data, :except => [:index]

  def index
    #@country = Country.first
    #@country ||= Country.find_by_iso("US")
    # ^ Does not work because no countries are in the database from the app. Even though countries are accessible in rails console.

    @trip = "yes"
    @users = User.all
    @countries = Country.all
    # ^^ Country as a class exists but it is not populated in this part of the app.

所以使用这个控制器代码,如果我在我的视图中抛出它,我可以看到:

  1. @trip的值。这意味着控制器可以发送数据。
  2. @users的价值。这意味着数据库正在运行。我可以列出所有用户及其电子邮件
  3. 我没有看到列出的单个国家。他们都没有出现。但是,如果我将c导入控制台并尝试此操作,它可以正常工作。美国有51个州。他们所有人都以完美的爱国婚姻回归他们的国家。
  4. 任何人都可以从这里发生的事情做出正面或反面吗?

2 个答案:

答案 0 :(得分:2)

我将此答案归类为“部分且可能性不高”。&#39;考虑发布您的视图代码以帮助澄清您的问题。无论哪种方式,也许这个调试建议可能会让你得到答案。

您是否看到与两种不同Rails环境相关的行为?尝试在两种情况下显示Rails.env,然后查看config / database.yml文件。在该文件中,您可能会看到每个项目的Rails环境都有不同的数据库。不同的环境可能有诸如&#34; test&#39;,&#39; production&#39;和&#39; development。等名称。您可能会注意到,为每个环境连接的列出的数据库是不同的。如果您确保&#39; countries&#39; (以及其他相关表格)填充在数据库中,用于&#39; rails c&#39;根据您的申请,行为应该是相似的。

更多关于Rails.env here

答案 1 :(得分:2)

我猜你正在开发模式下运行控制台,而你的应用程序处于发布模式。尝试

rails c production

我打赌你的国家不存在于生产数据库中。