![](/img/trans.png)
[英]Ruby on Rails - Hartl Tutorial Chapter 7 - The action 'index' could not be found for UsersController
[英]Michael Hartl Rails Tutorial chapter 7 error Action not found in UsersController
我現在正在關注邁克爾哈特爾的Rails教程,我已經成功達到7.22而沒有任何重大障礙。 但是我對測試的結果感到困惑,他說:
Failures:
1) UserPages signup with invalid information should not create a user
Failure/Error: expect{click_button submit }.not_to change(User, :count)
AbstractController::ActionNotFound:
The action 'create' could not be found for UsersController
# (eval):2:in `click_button'
# ./spec/requests/user_pages_spec.rb:29:in `block (5 levels) in <top (required)>'
# ./spec/requests/user_pages_spec.rb:29:in `block (4 levels) in <top (required)>'
2) UserPages signup with valid information should create a user
Failure/Error: expect{click_button submit}.to change(User, :count).by(1)
AbstractController::ActionNotFound:
The action 'create' could not be found for UsersController
# (eval):2:in `click_button'
# ./spec/requests/user_pages_spec.rb:42:in `block (5 levels) in <top (required)>'
# ./spec/requests/user_pages_spec.rb:42:in `block (4 levels) in <top (required)>'
Finished in 0.7718 seconds
6 examples, 2 failures
我按照教程的指示將以下內容添加到我的用戶控制器頁面:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
end
但它似乎仍然沒有奏效。 我已經嘗試添加一個創建方法,但這只會丟失一個丟失的模板錯誤...
如果它有幫助,這里是rake routes命令的輸出:
~/dev/rails/sample_app$ rake routes
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
root / static_pages#home
signup /signup(.:format) users#new
help /help(.:format) static_pages#help
about /about(.:format) static_pages#about
contact /contact(.:format) static_pages#contact
在回復評論時,失敗的測試是:
describe "signup" do
before{ visit signup_path }
let(:submit) {"Create my account"}
describe "with invalid information" do
it "should not create a user" do
expect{click_button submit }.not_to change(User, :count)
end
end
describe "with valid information" do
before do
fill_in "Name", with: "Example User"
fill_in "Email", with: "user@example.com"
fill_in "Password", with: "foobar"
fill_in "Confirmation", with: "foobar"
end
it "should create a user" do
expect{click_button submit}.to change(User, :count).by(1)
end
end
end
提前感謝任何建議!
測試不應該在那時通過。 繼續關注本教程,您將看到它是如何工作的。
在鏡像錯誤代碼並直接進入此處之前,我在同樣的事情上掙扎了大約半小時。 @mhartl顯然是正確的,並且教程中沒有拼寫錯誤,只是當他說“注冊頁面的測試”應該再次起作用時,它有點令人困惑。 他沒有提到注冊頁面提交的內容(這應該是教程中此時失敗的兩個測試)。
我有同樣的問題(兩個注冊測試仍未在7.3.1結束時通過)后來發現我犯了以下錯誤:
當我在Users
控制器中添加create
方法時,我不小心用create
方法覆蓋了new
方法(我把它們搞糊塗了)。 但是,您需要兩種方法。 現在它有效。
我希望這對某人有幫助!
application.rb文件中的config.use_transactional_fixtures = true
並確保您在userscontroller中定義了一個創建操作
將此添加到您的app / controller / users_controller.rb:
class UsersController < ApplicationController
attr_accessible :tags_attributes
# GET /users
# GET /users.json
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
end
end
# GET /users/1
# GET /users/1.json
def show
@user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
end
# GET /users/new
# GET /users/new.json
def new
@user = User.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @user }
end
end
# GET /users/1/edit
def edit
@user = User.find(params[:id])
end
# POST /users
# POST /users.json
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# PUT /users/1
# PUT /users/1.json
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# DELETE /users/1
# DELETE /users/1.json
def destroy
@user = User.find(params[:id])
@user.destroy
respond_to do |format|
format.html { redirect_to users_url }
format.json { head :no_content }
end
end
end
您需要添加一個create
操作(我遇到了同樣的問題):
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
end
有同樣的問題。 Fix出現在第二版的“注冊失敗”部分,第305頁,所以繼續。 您缺少控制器中的create-action。 如上所述,注冊頁面測試工作的提及令人困惑。 它只是工作的頁面,而不是提交表單。
這本書絕對精湛,是我讀過的最好的編碼書之一,實際上是最好的。 然而,正如經常使用跨越許多頁面的示例代碼或在本例中整本書一樣,它可能會有點混亂,特別是如果你錯過了什么。 這里的解決方案是始終在書中非常清楚地說明什么應該在什么階段工作,什么不存在以及后來要做些什么事情才能讓工作起作用。 哈特爾確實如此,但有些地方仍有可能讓人感到困惑。 重復和拼寫出來的東西不會受到傷害。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.