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