0

私は誰かが私のアプリケーションで私をさらに助けてくれることを望んでいます。

これが私がいるところです。「所有者」の役割を持つ一般ユーザーと「シーカー」の役割を持つシーカーがいます。これで、「所有者」が投稿を作成し、「シーカー」がそれを受け入れます。

Railsの経験が豊富な人が、次のことを行うための最善の方法と構造を提案してくれることを願っています。

1.)投稿を作成するときに、「所有者」をデータベース内の投稿に接続します

2.)「シーカー」を受け入れる投稿に接続します。

したがって、「owner1」が10個の投稿を作成する場合、彼はそれらの投稿のうち10個にリンクされ、他の投稿にはリンクされないはずです。ここで、「seeker1」は、10個の投稿すべてを調べますが、そのうち5個だけが好きで、ボタンをクリックして、彼が選んだ5個の投稿を受け入れます。

Railsですべてを自動的に接続する方法がわかりません。提案があれば役に立ちます。Stackoverflowでこれに似たものはまだ見つかりませんでした。


私の初期設定と機能を言い換えたかっただけです。

私のアプリケーションでは、

  • ロールを持つユーザーは、職務記述書の投稿を作成できます。彼はそれを編集したり、削除したり、完了のマークを付けたりすることができます。

  • また、ユーザーが作成したすべての投稿を閲覧するシーカーもいます。求職者は、投稿と仕事の説明が好きで、その仕事をしたい場合は、[つかむ]ボタンをクリックします。

したがって、作成したい関数は次のとおりです。

1.)ユーザーを投稿に結び付けます。現在、すべてのユーザーが投稿を作成してすべての投稿を表示できます。特定のビューで、作成した投稿のみを表示し、他の投稿は表示しないようにします。

2.)また、「シーカー」がDB内で、一緒に作業したい職務に自分自身を結び付けることができるようにしたいと思います。

今、物事の私の全体的な理解とそれの初心者から。DBを更新して2つの新しいテーブルを作成する必要があると思います。1x所有者と1シーカー用。

私が行き詰まっているのはコントローラーです。ユーザーが投稿の詳細を含むフォームを送信し、そのDBオブジェクトにユーザーを結び付けた後、「defnew」を実行する方法。

上記のステップ2は、「def grabit」を使用して、シーカーが「grab it」ボタンをクリックしたときに実行し、シーカーをその投稿に結び付けることです。

したがって、最終的に@job = Joblisting.find(1)を実行すると、DBテーブルが「user」列で吐き出され、この投稿を作成したユーザーと「seeker」テーブルに作業中のシーカーの名前が表示されます。それ。もちろんシーカーがいなければ、それはゼロでしょう。

うーん..考えてみれば、人々を特定するための電子メールアドレスは大丈夫で示唆に富むものでしょうか、それともサインアップしたユーザーごとに何らかのIDを実行することを提案しますか。

これに関するどんな助けも素晴らしいでしょう。

4

2 に答える 2

1

すべての投稿には1人の所有者がいるため、ユーザーがhas_manyの投稿を持ち、投稿がユーザーに属するという単純な1対多の関係を形成します。いいねされた投稿には多くの「シーカー」が含まれる可能性がありますが、表示どおりにユーザーは多くの投稿を「シーク」できます。したがって、それはHABTM関係を形成します。これは次のようになります。

class User < ActiveRecord::Base 
  has_many :posts
  has_and_belongs_to_many :sought_posts, :class_name => 'Post', :join_table => 'posts_users'

class Post < ActiveRecord::Base
  belongs_to :user
  has_and_belongs_to_many :seekers, :class_name => 'User', :join_table => 'posts_users'

「sought_posts」が最高の名前かどうかはわかりませんが、あなたは(うまくいけば)私のドリフトを取得します。また、join_tableをここで指定する必要があるかどうかも100%わかりませんが、問題はないので、含めると思いました。

HABTM結合テーブルの移行は次のようになります。

class CreatePostUsers < ActiveRecord::Migration
  def change
    create_table :posts_users, :id => false do |t|
        t.references :post
        t.references :user
    end
    add_index :posts_users, [:post_id, :user_id]
    add_index :posts_users, [:user_id, :post_id]
  end
end
于 2013-01-04T11:38:04.097 に答える
0

私は専門家ではありませんが、以下のようなものがいいと思います。
PostsとLikedPostsの両方に:user_id列が含まれます。
LikedPostsには:post_idのみが含まれます。

その後、投稿を次のように呼び出すことができます

User.posts.all
User.liked_posts.all

モデルは次のように関連付けられます。

class User < ActiveRecord::Base 
  has_many :posts
  has_many :liked_posts

class Post < ActiveRecord::Base
  belongs_to :user

class LikedPost < ActiveRecord::Base
  belongs_to :user
  has_many :posts

お役に立てば幸いです。

于 2013-01-04T06:30:06.187 に答える