2013-04-21 3 views
0

Я выполнял учебник по рельсам M.Hart's Rails. В одном из разделов вы реализуете ссылки удаления на странице индекса пользователя, для каждого пользователя, который не является вашим; предоставляя вам пользователя администратора. Я также хочу реализовать ссылку удаления на каждой странице профиля пользователя. Я поместил код удаления в частичный, и он работает нормально на странице индекса и на отдельных страницах показов пользователя, но я все еще получаю отказы RSpec после добавления частичного кода страницы показа. Мой код ниже ... btw - главный пользователь - тот же, что и пользователь admin.Rails RSpec Руководство пользователя MHart удалить ссылку

пользователей/show.html.erb

<section> 
    <%= gravatar_for @user %> 
    <h3><%= @user.name %></h3> 
    <div id="profile_delete_link"><%= render 'shared/user_delete_link', user: @user %></div> 
</section> 

общий/user_delete_link (частично -> _user/удалить/link.html.erb)

<% if !current_user?(user) && current_user.master? %> 
    >> <%= link_to "delete", user, method: :delete, data: { confirm: "You sure?" } %> 
<% end %> 

user_pages_spec.rb -> код ниже являются спецификации, которые ломаются, если частичный (выше) добавлен к коду пользователей/шоу. когда парциальное удаляют эти функции вернуться к зеленому

describe "profile page" do 
let(:user) { FactoryGirl.create(:user, name: "foo bar") } 

let!(:mp1) { FactoryGirl.create(:micropost, user: user, content: "Foo") } 
let!(:mp2) { FactoryGirl.create(:micropost, user: user, content: "Bar") } 

before { visit user_path(user) } 

it { should have_selector('h3', text: user.name) } 
it { should have_selector('title', content: "F.Bar") } 

describe "microposts" do 
    it { should have_content(mp1.content) } 
    it { should have_content(mp2.content) } 
    it { should have_content(user.microposts.count) } 
end 

конца

user.rb

# == Schema Information 
# 
# Table name: users 
# 
# id    :integer   primary key 
# name   :string(255) 
# email   :string(255) 
# password_digest :string(255) 
# created_at  :datetime 
# updated_at  :datetime 
# master   :boolean 
# 

class User < ActiveRecord::Base 
has_secure_password 

email_regex = /^[_+a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i 

attr_accessible :name, :email, :password, :password_confirmation 
has_many :microposts, dependent: :destroy 

    validates :name, :presence => true, :length => { within: 2..40 } 
    validates :email, :presence => true, :uniqueness => { case_sensitive: false }, :format => { with: email_regex } 
    validates :password, :presence => true, :length => { within: 5..50 } 
    validates :password_confirmation, :presence => true 

def feed 
    Micropost.where("user_id = ?", id) 
end 
end 

user_controller.rb шоу и индексировать действия, а также до фильтров

before_filter :authorize,  only: [:index, :edit, :update, :destroy] 
before_filter :correct_user, only: [:edit, :update] 
before_filter :master_user, only: [:destroy] 

def index 
    @users = User.all 
end 

def show 
    @user = User.find(params[:id]) 
    @microposts = @user.microposts.paginate(page: params[:page]) 
    @title = initials_of @user.name 
end 

Если вы хотите, чтобы я опубликовал любой код или добавлю дополнительную информацию, пожалуйста, дайте мне знать :) спасибо в adv Анс.

Update: RSpec ошибки:

UserPages profile page microposts 
Failure/Error: before { visit user_path(user) } 
ActionView::Template::Error: 
    undefined method `master?' for nil:NilClass 
# ./app/views/shared/_user_delete_link.html.erb:1:in `_app_views_shared__user_delete_link_html_erb__1484829579316662700_70204671481360' 
# ./app/views/users/show.html.erb:6:in `_app_views_users_show_html_erb___32313850444620306_70204671449340' 
# ./spec/features/user_pages_spec.rb:88:in `block (3 levels) in <top (required)>' 

SessionsHelper:

module SessionsHelper 
........... 
    def current_user 
     @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 
........... 
end 
+0

Пожалуйста, сообщите об ошибках Rspec. –

+0

Выполнено :) Ошибка rspec выше применима ко всем 11 ошибкам спецификации –

+0

Как регистрируются ваши тесты, поэтому установлен current_user? –

ответ

0

Что этот ответ говорит вам, что, когда он звонит хозяин? на объекте current_user объект current_user равен Nil, то есть он не существует.

Это означает, что @current_user в настоящее время не определен, и User.find также не находит пользователя.

Вы передаете @user своим частичным, поэтому я думаю, что ваше условное условие должно основываться на @user.

Надеюсь, что это имеет смысл