Я работаю над небольшим проектом Android с сервером RoR.
Вот три модели:
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
конец
Модель Пользователь использует модель Relation для связи с моделью Friend. Я использую скаффолд для создания трех моделей и добавляю код отношений в их файлы моделей. Я также создаю контроллер API для отправки XML-файла в приложение Android. Вот код контроллера:
def find_friend
@user=User.where("id=?",params[:id])
@friend=@user.friends
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» или изменить файл миграции?
В режиме консоли rails я набираю "user = User.find (1), friend = user.friends" и получаю правильный результат.