「IDなしで<model>を見つけることができませんでした」ルート/セッションの問題

私はここで私の問題の高低を調べてきましたが、正解を見つけられませんでした。私は単純な経路の問題かもしれないと思う。私のアプリでは、ユーザーはプロジェクトを作成し、プロジェクトを通じて「植物」に従うことができます。これまで正式にサインアップする必要はありません。プロジェクトの更新と編集のルートは正常に動作します。 「IDなしでProjectを見つけることができませんでした」というエラーは、「Prelationships」コントローラのCREATEアクションにアクセスして、「Project」と「Plants」の関係を構築した後にのみ発生します。私のコードは以下の通りです:

私のroutes.rb

resources :sessions,       :only => [:new, :create, :destroy]
resources :microposts,     :only => [:create, :destroy]
resources :relationships,  :only => [:create, :destroy]  
resources :prelationships, :only => [:create]
resources :plants   
resources :projects do        
  member do
   get :pfollowing, :pfollowers  
  end
end       

私の「プレシップシップ」コントローラー

class PrelationshipsController < ApplicationController

  def create   
    @project = Project.find(params[:project_id])                                   
    @plant = Plant.find(params[:prelationship][:pfollowed_id])
    @project.pfollow!(@plant)
    respond_to do |format|
      format.html { redirect_to @project }
      format.js { redirect_to @project }
    end
  end
end

私の「先住民族」モデル

class Prelationship < ActiveRecord::Base                          
attr_accessible :pfollowed_id

belongs_to :pfollower, :class_name => "Project"
belongs_to :pfollowed, :class_name => "Plant"

validates :pfollower_id, :presence => true
validates :pfollowed_id, :presence => true
end                

私の「プロジェクト」モデル

class Project < ActiveRecord::Base                    
attr_accessible :title, :address, :latitude, :longitude, :state      

belongs_to :user        
has_many :prelationships, :foreign_key => "pfollower_id",
                        :dependent => :destroy   
has_many :pfollowing, :through => :prelationships, :source => :pfollowed          

  def pfollowing?(pfollowed)
    prelationships.find_by_pfollowed_id(pfollowed)  
  end  

  def pfollow!(pfollowed)
    prelationships.create!(:pfollowed_id => pfollowed.id)
  end
end    

私の「植物」モデル

class Plant < ActiveRecord::Base      

has_many :prelationships, :foreign_key => "pfollowed_id",
                        :class_name => "Prelationship"
has_many :pfollowers, :through => :reverse_prelationships, 
                    :source => :pfollower   
end

@project 'show'ページで関係を構築するための私の部分

<%= form_for @project.prelationships.build(:pfollowed_id =>
                                 @project_id) do |f| %>
<%= collection_select(:prelationship, :pfollower_id, Plant.all, :id, :name, options =   
{:prompt => "Select your plants"}, :class => "listselect") %>
<div class="actions">
<%= f.submit "Pfollow" %>
 </div>
<% end %>

エラーメッセージは、「IDなしでProjectを見つけることができませんでした」と表示されます。

app/controllers/prelationships_controller.rb:4:in `create'

パラメータ:

{"utf8"=>"✓",
"authenticity_token"=>"NKqa1f0M2yPLQDHbRLnxl3SiwBeTus/1q1hpZjD7hgY=",
"prelationship"=>{"pfollower_id"=>"5"},"commit"=>"Pfollow"}  

これが経路の問題であれば、正しい言語を見つけることができないようです。私は他のユーザーに従うことができるUserモデルを構築しましたが、これらの問題は発生しませんでした。私のプロジェクトのセッションを作成する必要があるかもしれません。

この初心者を助けてください!

1

1 答え

簡単な方法:

<%= form_for @project.prelationships.build(:pfollowed_id =>
                             @project_id) do |f| %>
    <%= collection_select(:prelationship, :pfollower_id, Plant.all, :id, :name, options =   
    {:prompt => "Select your plants"}, :class => "listselect") %>
    <%= hidden_field_tag :project_id, @project.id %>
    <div class="actions">
        <%= f.submit "Pfollow" %>
    </div>
<% end %>

そして正しい方法はプロジェクトにネストされたルートを作成することですが、後でこのリファクタリングをエクササイズすることもできます。

2
追加された
ブリリアント!ありがとうございました。私はhidden_​​field_tagsを使いこなしていましたが、そのコンセプトは私には分かりませんでした。
追加された 著者 Matthew Melone,