2013-03-25 3 views
0

Я относительно новичок в рельсах и занимаюсь простейшим: ассоциируйте пользователей и сообщения. Я читал this, но то, что больше, чем это сделать, мне нужно сделать, чтобы заставить его работать (или это единственное) ?:Rails: Как настроить активные ассоциации записей?

class User < ActiveRecord::Base 
    has_many :posts, :dependent => :destroy 
end 

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

Update: я не могу заставить его работать. Когда я делаю сообщение с подписанным пользователем, я получаю false, когда я делаю @user.posts.any? в консоли. Мой код:

post.rb

class Post < ActiveRecord::Base 
    attr_accessible :title, :user_id 
    belongs_to :user 
    before_create :default_values 

user.rb (я использую Разрабатывают)

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    attr_accessible :email, :password, :password_confirmation, :remember_me 
    has_many :posts, dependent: :destroy 
end 

20130320162700_create_posts.rb

class CreatePosts < ActiveRecord::Migration 
    def change 
    create_table :posts do |t| 
     t.string :title 
     t.integer :user_id 

     t.timestamps 
    end 
    end 
end 
+0

Выглядит хорошо для меня. Пока таблица 'users' имеет столбец' post_id'. Вы получаете какие-либо ошибки? – Sam

+0

это должно работать, вы должны иметь возможность называть '@ user.posts', чтобы получить все сообщения для данного пользователя или @ post.user, чтобы получить пользователя для данного сообщения. У вас какие-то ошибки?! – sameera207

+1

Я не получаю никаких ошибок, но я получаю '[]', если я делаю @ user.posts, даже если я сделал несколько сообщений. Но будет ли таблица 'users' иметь' post_id'? Разве это не просто таблица 'posts', которая будет иметь' user_id'? – allegutta

ответ

0

Вы должны убедиться в том, чтобы включить идентификатор пользователя в миграции, которая создает таблицу posts. В вашем файле миграции (в папке db/migrate вы найдете файл с именем 20130325105934_create_posts.rb)

Внутри файла вы найдете код миграции. Наряду другие заявленные атрибуты добавить

class CreatePosts < ActiveRecord::Migration 
    def change 
    create_table :posts do |t| 
    ...... 
    t.integer :user_id 
    ...... 
    end 

конец

Это должно быть достаточно, чтобы сделать вещи катиться :-)

Внутри кода, то вы можете создать нового пользователя

@user = User.new(:login => "my_user", .....) 

, а затем добавить сообщения одним из этих двух способов (есть и другие два).

post = Post.new(:title => "something", :text => "more of something", :user_id = @user.id) 

или

post = Post.new(:title => "something", :text => "more of something") 
    @user.posts << post 
+0

Привет, спасибо за быстрый ответ. Я теперь все настроил, но если я делаю '@ user.posts.any?', Я получаю false, даже если @user - это пользователь, с которого я сделал несколько сообщений. Любая идея почему? – allegutta

+0

Странно, я сделал игрушечный проект, запустил консоль и работал для меня. какую версию рельсов вы используете? –

+0

Я добавил код, который вы можете использовать в качестве руководства. если сообщение не работает –

Смежные вопросы