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

我迷失了两个部分:我如何传递/使用创建关系所需的用户 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 回答