Schienen - NoMethodError undefined method

Ich arbeite am Aufbau einer Anwendung (folgende Michael Hartl Kapitel 11), wo Nutzer können Sie Projekte, die von anderen Benutzern erstellt wurden.

Erstellte ich eine ProjectRelationship Modell hat zwei Komponenten: follower_id für die Benutzer und projectuser_id für die Projekte. Die foreign keys wurden als solche.

Recht jetzt mein _follow_form.html.erb Seite macht "Folgen" oder "unfollow", je nachdem, ob die current_user ist nach dem Projekt. Ich angehängt habe meinen code unten.

Jetzt den Folgen-button erzeugt auf jeder Projekt-Seite anzeigen. Nachdem ich klicken Sie auf die Schaltfläche Folgen, die generiert wird, durch _follow.html.erb es folgt das Projekt dementsprechend.

Aber wenn ich drücken Sie auf "unfollow" bekomme ich eine Fehlermeldung:

NoMethodError in ProjectRelationshipsController#destroy
undefined method `unfollow_project!' for #<User:0x007f9ed83dd6b8>

Application Trace | Framework Trace | Full Trace
app/controllers/project_relationships_controller.rb:12:in `destroy'

schema.rb

create_table "project_relationships", :force => true do |t|
  t.integer  "follower_id"
  t.datetime "created_at",     :null => false
  t.datetime "updated_at",     :null => false
  t.integer  "projectuser_id"
end

add_index "project_relationships", ["projectuser_id"], :name => "index_project_relationships_on_projectuser_id"

Routen.rb

resources :projects do       
  resources :comments 
  member do
    get :following
  end   
end
resources :project_relationships, only: [:create, :destroy]

project_relationship.rb

class ProjectRelationship < ActiveRecord::Base
   attr_accessible :projectuser_id

   belongs_to :user, foreign_key: "follower_id"
   belongs_to :project, foreign_key: "projectuser_id"
end

Projekt.rb

has_many :project_relationships, foreign_key: "projectuser_id"
has_many :favorited_by, through: :project_relationships, source: :user

Benutzer.rb

has_many :project_relationships, foreign_key: "follower_id"
has_many :followed_projects, through: :project_relationships, source: :project

def following_project?(project)
  project_relationships.find_by_projectuser_id(project.id)
end

def follow_project!(project)
  project_relationships.create!(projectuser_id: project.id)
end

def project_unfollow!(project)
  project_relationships.find_by_projectuser_id(project.id).destroy
end

project_relationships_controller.rb

class ProjectRelationshipsController < ApplicationController

def create
    @project = Project.find(params[:project_relationship][:projectuser_id])
    current_user.follow_project!(@project)
    redirect_to @project
  end

  def destroy
    @project = ProjectRelationship.find(params[:id]).project
    current_user.unfollow_project!(@project)
    redirect_to @project
  end
end

projects/show.html-Code.erb

<%= render 'follow_form' if signed_in? %>

Projekte/_follow_form.html-Code.erb

<% if current_user.following_project?(@project) %>
    <%= render 'unfollow' %>
<% else %>
    <%= render 'follow' %>
<% end %>

Projekte/_gehen.html-Code.erb

<%= form_for(current_user.project_relationships.build(projectuser_id: @project.id)) do |f| %>
  <div><%= f.hidden_field :projectuser_id %></div>
  <%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>

Projekte/_unfollow.html-Code.erb

<%= form_for(current_user.project_relationships.find_by_projectuser_id(@project),
         html: { method: :delete }) do |f| %>
  <%= f.submit "Unfollow", class: "btn btn-large" %>
<% end %>

Projekte/_followerstats.html-Code.erb

<%= @project.favorited_by.count %>

InformationsquelleAutor spl | 2013-04-23

Schreibe einen Kommentar