2011-04-11 27 views
1

我正在使用RoR服務器處理一個小的Android項目。 這裏有三種型號:在Rails3上使用「has_many:through」關係時未定義的方法錯誤

class User < ActiveRecord::Base 
     has_many :relations 
     has_many :friends, :through => :relations 
     attr_accessor :friend_ids 
end 

class Relation < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend 
end 

class Friend < ActiveRecord::Base 
    has_many :relations 
    has_many :users, :through => :relations 
end 


class CreateUsers < ActiveRecord::Migration 
def self.up 
create_table :users do |t| 
    t.string :user_name 
    t.string :password 
    t.integer :city_id 
    t.integer :travelstyle_id 
    t.boolean :online 
    t.string :self_description 
    t.string :sex 
    t.integer :head_id 

    t.timestamps 
end 

def self.down 
    drop_table :users 
end 

class CreateFriends < ActiveRecord::Migration 
def self.up 
create_table :friends do |t| 
    t.string :user_name 
    t.integer :city_id 
    t.integer :travelstyle_id 
    t.string :self_description 
    t.string :sex 
    t.integer :head_id 
    t.timestamps 
end 

class CreateRelations < ActiveRecord::Migration 
def self.up 
create_table :relations do |t| 
    t.integer :user_id 
    t.integer :friend_id 
    t.timestamps 
end 

模型用戶使用模型關係與模型朋友連接。我使用腳手架來創建三個模型,並在模型文件中添加關係代碼。我還創建了一個API控制器來將xml文件發送到Android應用程序。下面是控制器代碼:

def find_friend 
    @user=User.where("id=?",params[:id]) 
    @[email protected] 
respond_to do |format| 
    format.html 
    format.xml 
end 

這是問題所在,當我使用的API(在http://localhost:3000/api/find_friend/1.xml型),服務器拋出一個錯誤:

NoMethodError in ApiController#find_friend 

undefined method `friends' for #<ActiveRecord::Relation:0x3478a28> 
app/controllers/api_controller.rb:21:in `find_friend' 

我是新到Rails,並不知道錯在哪裏。我是否必須在「route.rb」中添加一些內容或更改遷移文件?

在滑軌控制檯模式下,我輸入「user = User.find(1),friend = user.friends」並獲得正確的結果。

回答

3

~~~~(> _ <)~~~~ 問題是控制器方法「@ user = User.where(」id =?「,params [:id])」「。 「where」方法無法判斷結果是數組還是實際上是一個對象。如果我使用「@ user = User.find(params [:id])」,rails將會「足夠聰明」知道「哦,是的,這只是一個對象,它有一個名爲Friends的方法,因爲有人連接兩個模型在一起「。學習Rails喜歡結婚,你認爲你對她很瞭解,但有時候你會想:「上帝其實對於這個神祕傢伙一無所知。」

相關問題