0

Railsを初めて使用し、次のことを実行しようとしていますが、安全に実行していないと感じています。

私のサイトへの訪問者は、ユーザーのプロフィールページを表示し、登録せずにユーザーに連絡できます。ユーザーと訪問者の間にはhas_and_belongs_to_manyの関係があります。訪問者がユーザーに連絡したときに、訪問者テーブルに送信された情報を使用して新しいレコードを作成し、users_visitorsテーブルに新しい関係を作成して、後でユーザーに送信された情報を表示できるようにします。私がこれまでに持っているもの:

モデル:

class User < ActiveRecord::Base
has_and_belongs_to_many :visitors

class Visitor < ActiveRecord::Base
has_and_belongs_to_many :users

ビュー:user / profile.html.erb

#this is at example.com/user/id
<%= form_for Visitor.new, :url => contact_path, :html => { :method => :post } do |f| %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= submit_tag("Submit") %>
<% end %>

ルート.rb

#this will just point to a confirmation page
post '/contact',  to:  'visitors#contact', :as => :contact

私は2つの部分で迷子になっています:関係を作成するために必要なユーザーIDを渡す/使用するにはどうすればよいですか?また、この新しい関係を作成するためにコントローラー(またはモデル)はどのように見えるべきですか?

4

1 に答える 1

1

まず、このルートは最適ではないと思います

post '/contact',  to:  'visitors#contact', :as => :contact

私の意見では、このcontactアクションはUsersコントローラーではなく、コントローラーに配置する必要がありますVisitors。結局のところ、それはUserあなたが連絡しているのですよね?

代わりに、次のようなルートの恩恵を受けることができます(残りの部分がどのように見えるかわからないため、リソースの多いルートは使用していません)config/routes.rb

post '/users/:id/contact',  to:  'users#contact', :as => :contact

あなたのcontactメソッドは次のUsersControllerようになります

def contact
  @user = User.find(params[:id]) # this is how you get the user the visitor is contacting

  @visitor = Visitor.create(params[:visitor])
  @visitor.users << @user # this associates the User with the Visitor
end

上記は機能するはずですが、単純化された例です(私は検証を処理していません。訪問者をどこかにリダイレクトしていません。実際にユーザーに連絡していません) -ニーズに合わせてこのアクションを具体化する必要があります。

于 2013-01-12T17:21:25.990 に答える