我在 Rails 应用程序的用户索引页面上有一个用户列表,其想法是登录的用户可以通过单击其名称旁边的“开始友谊”按钮与其他用户建立友谊。这会在友谊表中添加一条记录。
该过程在本地托管时完美运行。这使用 SQLite(虽然我不认为这是数据库问题),日志如下所示:
Started POST "/friendships" for 127.0.0.1 at 2013-01-25 12:48:16 +0000
Processing by FriendshipsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"P5qQAuaSD1SNkgLDI6yQ2h9GhJjAub7l7On3+ZGBwiY=", "friendship"=>{"befriended_id"=>"16"}, "commit"=>"Start Friendship"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'eL_PfKhO9ZnYTxXTPo9UiQ' LIMIT 1
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "16"]]
(0.0ms) begin transaction
SQL (0.6ms) INSERT INTO "friendships" ("befriended_id", "befriender_id", "confirmed", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["befriended_id", 1], ["befriender_id", 16], ["confirmed", false], ["created_at", Fri, 25 Jan 2013 12:48:16 UTC +00:00], ["updated_at", Fri, 25 Jan 2013 12:48:16 UTC +00:00]]
(1.4ms) commit transaction
Redirected to http://localhost:3000/users
Completed 302 Found in 9ms (ActiveRecord: 2.3ms)
但是,当我在 Heroku 上托管的应用程序版本(使用 PostgreSQL)上执行相同操作时,我得到了臭名昭著的“我们很抱歉,但出了点问题(500)”错误。查看日志,似乎它正在寻找一个不存在的视图,但我不知道它为什么要寻找它。以下是日志:
2013-01-25T12:45:39+00:00 app[web.1]: Started POST "/friendships" for 79.97.21.43 at 2013-01-25 12:45:39 +0000
2013-01-25T12:45:39+00:00 heroku[router]: at=info method=POST path=/friendships host=meetflag.herokuapp.com fwd=79.97.21.43 dyno=web.1 queue=0 wait=0ms connect=1ms service=135ms status=500 bytes=643
2013-01-25T12:45:39+00:00 app[web.1]:
2013-01-25T12:45:39+00:00 app[web.1]: ActionView::MissingTemplate (Missing template friendships/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in:
2013-01-25T12:45:39+00:00 app[web.1]: * "/app/app/views"
2013-01-25T12:45:39+00:00 app[web.1]: ):
--- (then there's the list of where it's looked) ---
2013-01-25T12:45:39+00:00 app[web.1]: Processing by FriendshipsController#create as HTML
2013-01-25T12:45:39+00:00 app[web.1]: Parameters: {"utf8"=>"✓", "authenticity_token"=>"n+LI+Br3ahg5FxhNUm2u0b5YcqZGKpfeK7c3vJLkMyU=", "friendship"=>{"befriended_id"=>"2"}, "commit"=>"Start Friendship"}
2013-01-25T12:45:39+00:00 app[web.1]: Completed 500 Internal Server Error in 86ms
它甚至似乎没有达到数据库的程度。我已经尝试将 coffee-rails gem 从资产中移到 Gemfile 的主体中(如此处所述),根本没有 haml gem(如此处所述)并且我的 rake db 东西似乎正确(如这里提到)。
Friendships 控制器如下所示:
class FriendshipsController < ApplicationController
before_filter :signed_in_user, only: [:create, :update, :destroy]
respond_to :html, :js
def create
@user = User.find(params[:friendship][:befriended_id])
@user.start_friendship!(current_user)
respond_with(@user, location: request.referer)
end
def destroy
@user = Friendship.find(params[:id]).befriended
current_user.end_friendship!(@user)
respond_with(@user, location: request.referer)
end
def update
@user = Friendship.find(params[:id]).befriended
current_user.confirm_friendship!(@user)
respond_with(@user, location: request.referer)
end
end
有没有人知道可能出了什么问题以及如何解决?应用程序的其余部分工作正常!
提前感谢您提供的任何帮助。
更新
只是为了提供更新——我在本地安装了 PostgreSQL,以确保它与此无关。不是。即使在生产中,它在本地托管时也能正常工作。正如我所说,我认为问题在于它甚至没有进入数据库部分。
进一步更新
问题似乎是它试图渲染一个没有要渲染的视图的视图。我已经尝试摆脱 /app/views/friendships/ 中的 .js.erb 文件,以允许按钮使用 Ajax,但这并没有任何好处(我很高兴现在没有 Ajax) . 我可以放入一个 .html.erb 视图,但我不想要一个(我只是希望它返回到用户索引页面)......虽然如果我不能想出任何其他解决方案,我可以尝试它,只是为了看看它是否有效。
PS 我对之前的控制器进行了重构,所以上面展示了新版本。