レールのソーシャルリンクシステムに関する多くのチュートリアルを見ています。結合モデル「友情」を使用して、ユーザーオブジェクトのエイリアスとして友人を一貫して使用しているように見えることに気付きました。
最初はこれに従っていましたが、先に進むにつれて、物事がcreate.friend
本当に鈍くなっているようです。私の例では、「連絡先」と「接続」という用語を使用しています...ユーザーの連絡先をすべてリストするときは、連絡先コントローラーとビュー ( /contacts 、 /contacts/検索、/連絡先/作成など..) しかし、すべてのクラッドは実際には接続 (友情) テーブルを扱っています... これは、私が行くにつれて本当に後方に見え始めます.
なぜこのように行われるのですか?私が思う唯一の利点は、「contact.email」のようなものを言うことができることですが、コードに追加の抽象化と体操がそれに値するかどうかはわかりません。私は言うのと同じくらい幸せだろうcontact.user.email.
連絡先ページにリンクしますか? link_to contact.user
(右?)
モデルが標準的で明白な粗雑な構造と「接触」し、ユーザーモデルのこのエイリアシングを忘れた場合、何か問題はありますか? 率直に言って、認証以外の目的でユーザー モデルをいじってもあまりメリットはないと思います。ユーザーのすべての情報をプロファイルに入れています。
または、何か不足していますか?
更新: 不明な点があるようですので、詳しく説明します。
プランA:
def contact
belongs_to :user
belongs_to :connection, :class_name => 'User', :foreign_key =>'contact_id'
validates_uniqueness_of :contact_id, :scope => :user_id, :message => ' allready one of your contacts.'
attr_accessor :invite
end
次に、これに対して通常の CRUD を実行します。「連絡先」ページに移動すると、通常のcrud操作などですべての連絡先が表示されます...連絡先の電子メールを取得するには、このシナリオでは次のように言います: contact.connection.email
それから私はいくつかの読書をしました、そして他の誰もがこれをしているのを見ました:
class Connection < ActiveRecord::Base
belongs_to :user
belongs_to :contact, :class_name => 'User', :foreign_key =>'contact_id'
validates_presence_of :user_id
validates_presence_of :contact_id
validates_uniqueness_of :contact_id, :scope => :user_id, :message => ' allready one of your contacts.'
attr_accessor :invite
end
しかし、連絡先コントローラー (フレンド コントローラー) を使用して、ここでクラッドを渡します。唯一の利点は、contact.email と言うことができるように見えることですが、連絡先コントローラーのすべてのクラッドを奇妙なものにします。例えば:
http://railsforum.com/viewtopic.php?id=16760
なぜ明らかな切断が起こるのだろうと思っていました。
更新 2:
わかりました...連絡先はユーザーモデルへの参照でなければなりません...それを回避することはできません。その場合でも3ステップ。ただし、このパスに沿って実行しようとすると、いくつかの細かい点でまだ混乱しています。
次のようなコードでcontacts_controller.rbを使用するのはmvcの違反ですか?
# in contacts_controller.rb
def destroy
@connection = Connection.find(params[:id])
@connection.destroy
respond_to do |format|
format.html { redirect_to :action=>'index' }
format.xml { head :ok }
end
end
そして、form_for @connection やルーティング エラーなどを実行しようとすると、おかしくなりました。私はこの質問を台所で沈めていることを知っており、これまでのすべてのフィードバックに本当に感謝しています.
更新 3:
これらの関係で私が抱えている混乱の実際的な例を次に示します。
<% @contacts.each do |contact| %>
<li><%= contact.email %> <%= link_to 'Remove Contact', contact.connection, :confirm => 'Are you sure?', :method => :delete %></li>
<% end %>
ユーザーの連絡先を反復処理するとき、この連絡先を削除対象のリストに表示する接続を巧みに呼び出すにはどうすればよいですか? たぶん、ユーザーの接続を反復処理して、connection.contact.email をプルして電子メールを表示する必要がありますか?