1
我有三個資源 - users
,lists
和items
。我只是在users
下嵌套lists
,並相應地更新了我的鏈接,但是我從rspec中得到了兩個錯誤,這對我來說是一個完整的謎題。一切工作之前,我嵌套的路線。嵌套路線和無路線匹配
我是一個總的新手導軌和任何幫助,因此非常感謝!
1) Authentication authorization for non-signed-in users in the Lists controller submitting to the destroy action
Failure/Error: before { delete user_list_path(user, FactoryGirl.create(:list)) }
ActiveRecord::RecordInvalid:
Validation failed: Email has already been taken
# ./spec/requests/authentication_pages_spec.rb:84:in `block (6 levels) in <top (required)>'
2) User pages profile page
Failure/Error: before { visit user_path(user) }
ActionView::Template::Error:
No route matches {:action=>"show", :controller=>"users", :id=>nil}
# ./app/views/shared/_user_info.html.erb:1:in `_app_views_shared__user_info_html_erb__1836116684083464018_70145329446120'
# ./app/views/users/show.html.erb:4:in `_app_views_users_show_html_erb___902249955135429148_70145329432180'
# ./spec/requests/user_pages_spec.rb:12:in `block (3 levels) in <top (required)>'
的routes.rb
MyApp::Application.routes.draw do
resources :users do
resources :lists, only: [:show, :create, :destroy]
end
resources :items, only: [:show, :create, :destroy]
resources :sessions, only: [:new, :create, :destroy]
user.rb
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
has_many :lists, dependent: :destroy
has_many :items, through: :lists
list.rb
class List < ActiveRecord::Base
attr_accessible :name
belongs_to :user
has_many :items, dependent: :destroy
item.rb的
class Item < ActiveRecord::Base
attr_accessible :link, :list_id, :title
belongs_to :list
UPDATE
user_pages_spec.rb
require 'spec_helper'
describe "User pages" do
subject { page }
describe "profile page" do
let(:user) { FactoryGirl.create(:user) }
let!(:l1) { FactoryGirl.create(:list, user: user, name: "Foo") }
let!(:l2) { FactoryGirl.create(:list, user: user, name: "Bar") }
before { visit user_path(user) }
it { should have_selector('h1', text: user.name) }
it { should have_selector('title', text: user.name) }
describe "lists" do
it { should have_content(l1.name) }
it { should have_content(l2.name) }
it { should have_content(user.lists.count) }
end
end
describe "lists page" do
let(:user) { FactoryGirl.create(:user) }
let!(:l1) { FactoryGirl.create(:list, user: user, name: "Foo") }
let!(:i1) { FactoryGirl.create(:item, list: l1, title: "Shirt") }
before { visit user_list_path(user, l1) }
it { should have_content(i1.title) }
it { should have_content(l1.items.count) }
end
...
更新2
users_contoller.rb
class UsersController < ApplicationController
before_filter :signed_in_user, only: [:edit, :update]
before_filter :correct_user, only: [:edit, :update]
def show
@user = User.find(params[:id])
@lists = @user.lists
@list = current_user.lists.build if signed_in?
end
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Welcome to Wishlistt!"
redirect_to @user
else
render 'new'
end
end
def edit
end
def update
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated"
sign_in @user
redirect_to @user
else
render 'edit'
end
end
private
def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user?(@user)
end
end
謝謝 - 它對第一個錯誤非常有用!但是,第二個錯誤仍然顯示? –
第二個測試失敗,因爲您沒有用戶。你能重現你的測試代碼,以便我可以看看發生了什麼問題嗎? – tomciopp
查看更新 - 謝謝! –