Ruby on rails 在对象的编辑()下提交,以在不同对象下创建()

Ruby on rails 在对象的编辑()下提交,以在不同对象下创建(),ruby-on-rails,ruby-on-rails-3,forms,input,Ruby On Rails,Ruby On Rails 3,Forms,Input,RubyonRails3 我的经销商对象的编辑页面有一个按钮,用于提交所选用户的用户id。表单发布了正确的用户\u id,但正在使用分销商\u控制器的edit()方法。我想让它做的就是在Certificate表下创建一个新记录,其中包含发布的用户id。但我感到困惑,因为该应用程序似乎引用了certificates\u控制器的create()方法。除了发送邮件,它什么也不做。我错过了什么 我的模型: class Certificate < ActiveRecord::Base attr_ac

RubyonRails3

我的经销商对象的编辑页面有一个按钮,用于提交所选用户的用户id。表单发布了正确的用户\u id,但正在使用分销商\u控制器的edit()方法。我想让它做的就是在Certificate表下创建一个新记录,其中包含发布的用户id。但我感到困惑,因为该应用程序似乎引用了certificates\u控制器的create()方法。除了发送邮件,它什么也不做。我错过了什么

我的模型:

class Certificate < ActiveRecord::Base
attr_accessible :attend, :pass, :user_id
validates :user_id, presence: true
end
使用create()创建我的证书\u控制器

使用该按钮编辑My edit.html.erb

<%= form_for(@trained) do |f| %>
  <%= select_tag "certificate[user_id]", options_for_select(@current_users.collect{|x| [x.name, x.id]}), {:multiple => :multiple} %>
  <%= f.submit "Trained", class: "btn btn-large btn-primary" %>
<% end %>

当您返回新实例时,编辑控制器将返回现有实例

def edit
  @trained = Certificate.new(params[:certificate])
  @trained.save
end
应该是

def edit
  @trained = Certificate.find(params[:id])
end
编辑操作将发布到更新操作

def update
  @trained = Certificate.find(params[:id])
  @trained.update_attributes(params[:certificate])
end
form\u for(@trained)
根据您是否传递新记录,有两种不同的行为方式。如果记录是新的,它将
POST/create
,如果记录是持久的
PUT/update


请注意,我的代码将跳过所有验证和错误管理

更新方法应该在my certificates\u controller中,对吗?如果证书记录不存在,则必须创建证书记录。现在没有一个用户有与之相关联的证书记录,所以我第一次需要创建一个新的证书记录。默认情况下,
新建
操作应发送至
创建
编辑
更新
。当然,您可以自定义它,但是您应该对Rails如何在内部工作有一些了解。
def edit
  @trained = Certificate.new(params[:certificate])
  @trained.save
end
def edit
  @trained = Certificate.find(params[:id])
end
def update
  @trained = Certificate.find(params[:id])
  @trained.update_attributes(params[:certificate])
end