Ruby on rails 4 param未将数据推送到Rails中的数据库时出现问题

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

快一点。在创建对象时,我试图将参数推入数据库。如果我像下面的注释代码一样强制使用整数,那么它就可以工作了。但是,无论出于什么原因,我都无法将它添加到数据库中,因为我使用了params[:subscription_id]方法。我可以看到服务器中的参数,但无法看到它被插入到证书表中。如果我在我的控制器中强制使用整数,它将通过,我可以看到订阅id被传入

这可能与我的关系是一种非此即彼的关系有关吗

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日志也没有包含在表中。它只是不会将参数放入表中。建立的关系在这个方法中有发言权吗?嗯,甚至不认为参数是字符串。好吧,那么添加到我遇到的