Question

Je suis en cours d'exécution à travers le Tutoriel Ruby on Rails 3, et ayant une balle de le faire, mais je suis venu juste en face des problèmes qui ne sont pas se résoudre. Quand je lance mes specs, deux tests échouent.

Failures:
  1) UsersController PUT 'update' failure should render the 'edit' page
  Failure/Error: put :update, :id => @user, :user => @attr
  undefined local variable or method `object' for #<#<Class:0x00000102c861c8>:0x00000101d25558>
 # ./app/views/shared/_error_messages.html.erb:3:in `_app_views_shared__error_messages_html_erb___3390867530789228804_2170854120__2806434579894406668'
 # ./app/views/users/edit.html.erb:4:in `block in _app_views_users_edit_html_erb__558009768664311469_2170714160__919273585470661416'
 # ./app/views/users/edit.html.erb:3:in `_app_views_users_edit_html_erb__558009768664311469_2170714160__919273585470661416'
 # ./app/controllers/users_controller.rb:47:in `update'
 # ./spec/controllers/users_controller_spec.rb:158:in `block (4 levels) in <top (required)>'

2) UsersController PUT 'update' failure should have the right title
 Failure/Error: put :update, :id => @user, :user => @attr
 undefined local variable or method `object' for #<#<Class:0x00000102c861c8>:0x00000101b211f8>
 # ./app/views/shared/_error_messages.html.erb:3:in `_app_views_shared__error_messages_html_erb___3390867530789228804_2170854120__2806434579894406668'
 # ./app/views/users/edit.html.erb:4:in `block in _app_views_users_edit_html_erb__558009768664311469_2170714160__919273585470661416'
 # ./app/views/users/edit.html.erb:3:in `_app_views_users_edit_html_erb__558009768664311469_2170714160__919273585470661416'
 # ./app/controllers/users_controller.rb:47:in `update'
 # ./spec/controllers/users_controller_spec.rb:163:in `block (4 levels) in <top (required)>'

Je l'ai recherché dans mon code mieux que je peux comparer contre le code dans le livre, et je suis venu avec rien. Je suis sûr que c'est une petite chose stupide que je l'ai manqué, et je serais très reconnaissant une deuxième paire (ou plus;) des yeux.

Voici mes tests:

describe "failure" do
  before(:each) do
    @attr = { :email => "", :name => "", :password => "", :password_confirmation => "" }
  end

  it "should render the 'edit' page" do
    put :update, :id => @user, :user => @attr
    response.should render_template('edit')
  end

  it "should have the right title" do
    put :update, :id => @user, :user => @attr
    response.should have_selector("title", :content => "Edit User")
  end
end

Et voici les méthodes de mise à jour de la users_controller:

def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
  flash[:success] = "Profile updated"
  redirect_to @user
else
  @title = "Edit User"
  render 'edit'
end
end

Toute réflexion sur où je devrais regarder sont grandement appréciés.

Était-ce utile?

La solution

La source du problème est pas dans les fichiers spec même si le problème se manifeste dans les fichiers de spécifications. L'instructeur, Michael Hartl, modifie la déclaration suivante:

<%= render 'shared/error_messages' %
                  to 
<%= render 'shared/error_messages', :object => f.object %>
déclaration

. En d'autres termes, il ajoute «: objet => f.object » à la première instruction. Et vous devez regarder dans tous les fichiers qui ont la déclaration d'origine et de les changer à la seconde. Si vous manquez un d'entre eux, vous aurez ces erreurs. Plus précisément dans les regarder fichiers suivants (et toute autre qui pourrait avoir la déclaration d'origine):

app/views/users/edit.html.erb
app/views/users/fields.html.erb
app/views/users/new.html.erb
app/views/shared/micropost_form.html.erb
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top