Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用新HABTM关系和未注册用户的Rails联系人表单_Ruby On Rails_Has And Belongs To Many - Fatal编程技术网

Ruby on rails 使用新HABTM关系和未注册用户的Rails联系人表单

Ruby on rails 使用新HABTM关系和未注册用户的Rails联系人表单,ruby-on-rails,has-and-belongs-to-many,Ruby On Rails,Has And Belongs To Many,我是Rails新手,我正在尝试做以下工作,但我感觉我做得不安全: 我的网站的访问者可以查看用户的个人资料页面,无需注册即可与他们联系。在用户和访问者之间存在着一种“有”和“有”的关系。当访问者与用户联系时,我想在我的访问者表中创建一条新记录,记录他们提交的信息,并在users\u visitors表中创建一个新关系,以便以后向用户显示提交的信息。到目前为止,我所拥有的: 型号: class User < ActiveRecord::Base has_and_belongs_to_many

我是Rails新手,我正在尝试做以下工作,但我感觉我做得不安全:

我的网站的访问者可以查看用户的个人资料页面,无需注册即可与他们联系。在用户和访问者之间存在着一种“有”和“有”的关系。当访问者与用户联系时,我想在我的访问者表中创建一条新记录,记录他们提交的信息,并在users\u visitors表中创建一个新关系,以便以后向用户显示提交的信息。到目前为止,我所拥有的:

型号:

class User < ActiveRecord::Base
has_and_belongs_to_many :visitors

class Visitor < ActiveRecord::Base
has_and_belongs_to_many :users

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

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

post '/contact',  to:  'visitors#contact', :as => :contact
在我看来,这个
联系人
操作应该放在你的
用户
控制器上,而不是你的
访客
控制器上;毕竟,你联系的是
用户
,对吗

相反,您将受益于这样的路由(我不使用resourcesful路由,因为我不知道您的
config/routes.rb
的其余部分是什么样子)

然后,
userscoontroller
中的
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
def触点
@user=user.find(params[:id])#这是获取访问者正在联系的用户的方式
@visitor=visitor.create(参数[:visitor])

@访问者。用户非常感谢您!这正是我想弄明白的。我将继续通过验证等方式充实代码,只是不想让其他人做所有的思考:)
post '/contact',  to:  'visitors#contact', :as => :contact
post '/users/:id/contact',  to:  'users#contact', :as => :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