修改
以下是GitHub上的项目:https://github.com/lionelrudaz/myteam2
我使用Railsapp上的模板(Twitter Bootstrap,Devise和CanCan)在Ruby on Rails中创建我的第一个应用程序。
我还做了将我的应用程序发布到Heroku的必要步骤。
到目前为止,一切都很顺利,首先在Heroku上发布就好了,直到我在MacBook Pro上重新启动服务器。
现在我总是收到包含消息&#34的默认错误页面;我们很抱歉,但出了点问题。"
在终端,我得到:
=> Booting Thin
=> Rails 3.2.8 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
>> Thin web server (v1.5.0 codename Knife)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
Started GET "/" for 127.0.0.1 at 2012-10-01 19:19:21 +0200
Processing by HomeController#index as HTML
User Load (0.3ms) SELECT "users".* FROM "users"
Club Load (0.2ms) SELECT "clubs".* FROM "clubs" ORDER BY "clubs"."id" DESC LIMIT 1
Rendered home/index.html.erb within layouts/application (23.2ms)
Completed 500 Internal Server Error in 190ms
由于我不知道如何禁用错误页面以获得真正的堆栈跟踪,因此我开始按行代码删除代码行以查找哪条代码行不起作用。实际上,看起来f.label指令已经不再适用了。我知道他们做了,我已经使用了很长时间了。
这是我的home_controller.rb文件
class HomeController < ApplicationController
def index
@users = User.all
@club = Club.last
end
end
index.html.erb
<h3>Home</h3>
<%= debug @club %>
<%= form_for @club do |f| %>
<div class="control-group">
<%= RUBY_VERSION %>
<%= Rails.version %>
<%= f.label :name, :name %>
<%= f.text_field :name %>
</div>
<% end %>
<% @users.each do |user| %>
<p>User: <%=link_to user.name, user %></p>
<% end %>
更改
时会触发错误 <%= f.label :name, :name %>
到
<%= f.label :name %>
我在Heroku上更新了我的应用程序,因此您可以检查调试:http://myteam2.herokuapp.com/
我不知道什么是错的,它是如此基本以至于让我感到愚蠢。
当我在调查时,我已经说过f.label的第二个参数必须是一个字符串。使用t()方法从i18n文件更改电子邮件的文本是不可能的。
我无法继续使用我的应用程序并感到非常沮丧。我的谷歌研究没有成功。
如果您需要更多信息,请与我们联系。
干杯,
答案 0 :(得分:0)
使用带有和不带表单构建器的标签会让您感到困惑。
在label
内使用form_tag
时,它需要两个参数:第一个是将标签连接到相应文本字段所需的参数名称,第二个是实际标签文本。
但是,当您使用form_for @whatever do |f|
时,标签的第一个参数会自动知道,因为您执行了f.label :name
,并且f知道名称是什么,以及f.text_field
将生成什么,并且为你所有的肮脏。
在Rails文档中通常不清楚这一点,但是当您使用form_for
从关联模型执行这些参数时,您可以删除表单帮助程序方法的第一个参数。
答案 1 :(得分:0)
Lionel,当您使用开发环境在本地运行项目时,您应该会看到一条错误消息。
我克隆了您的项目,经过一些设置后,我运行rails s
以使用默认开发环境启动项目。主页加载正常,但单击“登录”转到/ users / sign_in会显示以下错误:
该错误表明config / locales / users.en.yml中存在一个问题,即预期有Hash,但没有返回。
目前config / locales / users.en.yml是一个空白文件。
您可以删除该文件。如果您从未计划使用它,请执行此操作。
OR
添加内容,以便解析文件以哈希的形式返回数据。只需将en:
添加到config / locales / users.en.yml的顶部即可。如果您计划将来输入翻译数据,请执行此操作。
好像你正在Heroku上开发你的应用程序。根据我的经验,这将很困难。在本地开发添加功能和修复错误要容易得多。一旦您的应用处于稳定状态,然后部署到Heroku。您甚至可以在Heroku上设置单独的临时服务器,以便在部署到生产服务器之前测试您的更改。
使用heroku gem,您可以运行heroku logs --tail
来监控应用程序的输出。如果您没有使用它可能有助于解决您的问题。