拥有并属于许多使用新HABTM关系的Rails联系表单和未注册用户



我是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

视图:用户/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 %>

routes.rb

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

我迷失了两个部分:我如何传递/使用创建关系所需的用户id,以及控制器(或模型)应该是什么样子来创建这个新关系?

首先,我认为这条路线不是最好的

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

在我看来,这个contact动作应该放在你的Users控制器上,而不是你的Visitors控制器上;毕竟,你联系的是 User ,对吧?

您反而会受益于像这样的路由(我没有使用资源路由,因为我不知道您的config/routes.rb的其余部分是什么样子)

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

你的UsersController中的contact方法可能看起来像

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

上面应该工作,但是一个简化的例子(我不处理验证;我并没有把访问者重新引导到某个地方;我实际上并没有联系用户) -您需要充实这个动作以满足您的需求。

最新更新