Ruby on rails 4 param未将数据推送到Rails中的数据库时出现问题
快一点。在创建对象时,我试图将参数推入数据库。如果我像下面的注释代码一样强制使用整数,那么它就可以工作了。但是,无论出于什么原因,我都无法将它添加到数据库中,因为我使用了params[:subscription_id]方法。我可以看到服务器中的参数,但无法看到它被插入到证书表中。如果我在我的控制器中强制使用整数,它将通过,我可以看到订阅id被传入 这可能与我的关系是一种非此即彼的关系有关吗Ruby on rails 4 param未将数据推送到Rails中的数据库时出现问题,ruby-on-rails-4,simple-form,strong-parameters,Ruby On Rails 4,Simple Form,Strong Parameters,快一点。在创建对象时,我试图将参数推入数据库。如果我像下面的注释代码一样强制使用整数,那么它就可以工作了。但是,无论出于什么原因,我都无法将它添加到数据库中,因为我使用了params[:subscription_id]方法。我可以看到服务器中的参数,但无法看到它被插入到证书表中。如果我在我的控制器中强制使用整数,它将通过,我可以看到订阅id被传入 这可能与我的关系是一种非此即彼的关系有关吗 Certificate Controller class CertificatesControl
Certificate Controller
class CertificatesController < ApplicationController
def new
@certificate = Certificate.new
end
def create
@certificate = Certificate.new(certificate_params)
@certificate.subscription_id = params[:subscription_id]
#@certificate.subscription_id = 1
if @certificate.save
flash[:success] = "The certificate has been uploaded"
redirect_to :back
else
render 'new'
end
end
private
def certificate_params
params.require(:certificate).permit(:document, :title, :subscription_id)
end
end
证书控制器
类证书控制器<应用程序控制器
def新
@certificate=certificate.new
结束
def创建
@证书=证书。新建(证书参数)
@certificate.subscription\u id=参数[:subscription\u id]
#@certificate.subscription\u id=1
if@certificate.save
flash[:success]=“证书已上载”
重定向到:返回
其他的
呈现“新”
结束
结束
私有的
def证书参数
参数要求(:证书)。许可证(:文件,:标题,:订阅号)
结束
结束
查看代码:
<%= link_to "upload certificate", new_certificate_path(subscription_id: subscription.id) %>
模型
class Subscription < ActiveRecord::Base
belongs_to :user
belongs_to :course
has_one :certificate
end
class Certificate < ActiveRecord::Base
belongs_to :subscription
has_attached_file :document
#validates_attachment :document, content_type: %w(application/pdf application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document)
do_not_validate_attachment_file_type :document
end
类订阅
证书表格
<div class="row">
<div class="site-forms">
<div class="col-md-10">
<%= simple_form_for @certificate do |f| %>
<!-- <= f.input :course_img, as: :file, required: true, label: "Please upload a brand image for your course" %><br> -->
<span class="btn btn-default btn-file">
<i class="fa fa-cloud-upload fa-lg"></i> Upload Image
<%= f.input :document, as: :file, required: true, label: false %>
</span> Please upload Certificate as PDF <br><br>
<%= f.input :title, placeholder: "Course Title", required: true, label: "Course Title" %>
<%= f.button :submit, class: "btn btn-primary" %>
<% end %>
</div>
</div>
</div>
上传图像
请以PDF格式上传证书
这可能是我缺少的一些愚蠢的东西,但是如果我在控制器中的注释代码中强制使用整数,我可以让它工作。我几乎可以肯定params代码是正确的。谢谢
添加日志
Started POST "/certificates" for ::1 at 2017-05-23 20:40:30 +0100
Processing by CertificatesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"6fV0xLOoy6ppNG7PYp37vkKqJnxU17nLPSK/mvbgH8k3s2LyaMEOJlekq5S0Ed4fpbNcqVe+cBsu5F38ACCmcg==", "certificate"=>{"document"=>#<ActionDispatch::Http::UploadedFile:0x007f954362c160 @tempfile=#<Tempfile:/var/folders/gx/86yj74bx3md88cfn2fwc975h0000gn/T/RackMultipart20170523-5261-1n2mwfl.png>, @original_filename="duck.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"certificate[document]\"; filename=\"duck.png\"\r\nContent-Type: image/png\r\n">, "title"=>"Test"}, "commit"=>"Create Certificate"}
Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/var/folders/gx/86yj74bx3md88cfn2fwc975h0000gn/T/36846677e3a8f4c0b16d8bdf8ef1860820170523-5261-e90bny.png'
(0.1ms) begin transaction
Command :: PATH=/usr/local/bin/:$PATH; file -b --mime '/var/folders/gx/86yj74bx3md88cfn2fwc975h0000gn/T/36846677e3a8f4c0b16d8bdf8ef1860820170523-5261-1d907er.png'
SQL (0.3ms) INSERT INTO "certificates" ("document_file_name", "document_content_type", "document_file_size", "document_updated_at", "title", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) [["document_file_name", "duck.png"], ["document_content_type", "image/png"], ["document_file_size", 49114], ["document_updated_at", "2017-05-23 19:40:30.662715"], ["title", "Test"], ["created_at", "2017-05-23 19:40:30.683041"], ["updated_at", "2017-05-23 19:40:30.683041"]]
(0.7ms) commit transaction
Redirected to http://localhost:3000/certificates/new?subscription_id=3
Completed 302 Found in 36ms (ActiveRecord: 1.1ms)
Started GET "/certificates/new?subscription_id=3" for ::1 at 2017-05-23 20:40:30 +0100
Processing by CertificatesController#new as HTML
Parameters: {"subscription_id"=>"3"}
Rendered certificates/_form.html.erb (7.7ms)
Rendered certificates/new.html.erb within layouts/application (8.7ms)
Rendered shared/_message.html.erb (0.1ms)
Completed 200 OK in 95ms (Views: 94.3ms | ActiveRecord: 0.0ms)
2017年5月23日20:40:30+0100时,开始为::1发布“/证书”
由CertificatesController处理#创建为HTML
参数:{“utf8”=>“✓", "真实性令牌“=>”6fV0xLOoy6ppNG7PYp37vkKqJnxU17nLPSK/mvbgH8k3s2LyaMEOJlekq5S0Ed4fpbNcqVe+cBsu5F38ACCmcg==”,“证书”=>{“文档”=>,“标题”=>“测试”},“提交”=>“创建证书”}
命令::PATH=/usr/local/bin/:$PATH;文件-b——mime'/var/folders/gx/86yj74bx3md88cfn2fwc975h0000gn/T/36846677e3a8f4c0b16d8bdf8ef1860820170523-5261-e90bny.png'
(0.1ms)开始事务处理
命令::PATH=/usr/local/bin/:$PATH;文件-b——mime'/var/folders/gx/86yj74bx3md88cfn2fwc975h0000gn/T/36846677e3a8f4c0b16d8bdf8ef1860820170523-5261-1d907er.png'
SQL(0.3ms)在“证书”(“文档文件名”、“文档内容类型”、“文档文件大小”、“文档更新位置”、“标题”、“创建位置”、“更新位置”)中插入值(?,,,,,,,,,,,,?,,,?)[[“文档文件名”、“duck.png”],[“文档内容类型”、“图像/png”],[“文档文件大小”,49114),“文档更新位置”,“2017-05-23 19:40:30.662715”]、[“标题”、“测试”]、[“创建时间”、“2017-05-23 19:40:30.683041”]、[“更新时间”、“2017-05-23 19:40:30.683041”]
(0.7ms)提交事务
重定向到http://localhost:3000/certificates/new?subscription_id=3
36毫秒内完成302次(ActiveRecord:1.1毫秒)
于2017年5月23日20:40:30+0100开始为::1获取“/证书/新?订阅\u id=3”
CertificatesController处理#新的HTML格式
参数:{“subscription_id”=>“3”}
呈现证书/_form.html.erb(7.7ms)
布局/应用程序中呈现的证书/new.html.erb(8.7ms)
呈现共享/_message.html.erb(0.1ms)
在95毫秒内完成200 OK(视图:94.3毫秒|活动记录:0.0毫秒)
参数是字符串。请重试
@certificate.subscription_id = params[:subscription_id].to_i
参数是字符串。请尝试
@certificate.subscription_id = params[:subscription_id].to_i
尝试如下更改此函数
def certificate_params
params.require(:certificate).permit(:document, :title, :subscription_id, :subscription)
end
可能允许参数中的“允许订阅”字段。请尝试按如下所示更改此功能
def certificate_params
params.require(:certificate).permit(:document, :title, :subscription_id, :subscription)
end
可能允许参数中的“允许订阅”字段。您需要在隐藏字段中设置您的
订阅\u id
,以便在参数哈希中传递
<%= f.hidden_field :subscription_id, :value => params[:subscription_id] %>
params[:订阅\u id]>
通过这种方式,它将与其他参数一起设置。您需要在一个隐藏字段中设置您的
订阅\u id
,以便在参数散列中传递它
<%= f.hidden_field :subscription_id, :value => params[:subscription_id] %>
params[:订阅\u id]>
通过这种方式,它将与其余的参数一起设置。Hmm甚至没有证明参数是字符串。好吧,那么添加to_i方法,它将输入一个订阅id。现在唯一的错误是订阅id输入为0。我查看了服务器,当GET方法从参数中获取参数时,它显示的参数是正确的,但是如果插入到表中,它将显示为0。params[:subscription\u id]=“1”?不,我的意思是如果我在控制器中强制at.certificate.subscription\u id=1,我可以将订阅id馈送到db中。如果我将at.certificate.subscription\u id=params[:subscription\u id]在插入数据库时无法识别它。因此,在我从url中提取参数之前,我知道代码正在工作。在这个url上,localhost:3000/certificates/new?subscription_id=3,如果您记录参数,它将显示订阅id=0。嗨,Margo,不,如果我将参数更改为_I,它将输入一个0。否则它为null,我可以在即使我能看到参数值是正确的,e日志也没有包含在表中。它只是不会将参数放入表中。建立的关系在这个方法中有发言权吗?嗯,甚至不认为参数是字符串。好吧,那么添加到我遇到的