2011-11-25 65 views
1

我在這裏搜索了我的問題高和低,並沒有完全找到正確的答案。我認爲這可能是一個簡單的路線問題。在我的應用程序中,用戶可以創建一個項目,並在正式註冊之前通過他們的項目關注「工廠」。更新和編輯項目本身的路線工作正常。在我嘗試訪問我的「Prelationships」控制器中的CREATE操作以建立「項目」和「植物」之間的關係後,我得到的錯誤「找不到沒有ID的項目」。我的代碼如下:「找不到<model>沒有ID」路線/會話問題

我的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  

我 「Prelationships」 控制器

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 

我 「Prelationships」 模式

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「秀」的關係頁面

<%= 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找不到項目」一次我打了部分提交。

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

和參數:

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

如果這是一個路線問題,我似乎無法找到合適的語言來解決它。我已經建立了一個能夠跟隨其他用戶並且沒有這些問題的用戶模型,這使我相信我可能需要爲我的項目創建一個會話?

請幫助這個新手,請!

回答

2

最簡單的方法:

<%= 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 %> 

而正確的方法是建立在項目嵌套的路線,但你可以做到這一點重構作爲練習以後。

+0

太棒了!謝謝。我曾與hidden_​​field_tags混淆,但這個概念已經躲過了我。 –

相關問題