我正在使用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」並獲得正確的結果。