users
、およびの 3 つのリソースがlists
ありitems
ます。リンクをネストlists
しusers
てそれに応じて更新しましたが、rspec から 2 つのエラーが発生していますが、これは完全な謎です。ルートをネストする前に、すべてが機能しました。
私はレールの初心者なので、どんな助けでも大歓迎です!
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)>'
ルート.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
アップデート
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