通过嵌套表单和载波上传似乎不起作用

2023-12-26

我有一个Profile模型和Transcript model.

My Profile模型看起来像这样:

class Profile < ActiveRecord::Base
  has_many :transcripts, dependent: :destroy
  accepts_nested_attributes_for :transcripts, allow_destroy: true
end

Transcript模型看起来像这样:

class Transcript < ApplicationRecord
  belongs_to :profile
  mount_uploader :url, TranscriptUploader
end

这是我的TranscriptUploader

class TranscriptUploader < CarrierWave::Uploader::Base
  storage :fog

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def content_type_whitelist
    "application/pdf"
  end

  def extension_whitelist
    %w(jpg jpeg gif png pdf)
  end    
end

我正在使用茧宝石 https://github.com/nathanvda/cocoon处理表单的嵌套属性。

这是我的profile/_form.html.erb:

<%= simple_form_for @profile, html: { class: "form-horizontal" } do |f| %>
  <%= f.error_notification %>

    <div id="transcripts" class="text-center">
      <%= f.simple_fields_for :transcripts do |transcript| %>
        <%= render 'transcript_fields', f: transcript %>
      <% end %>
      <div class="links">
        <%= link_to_add_association 'Add Transcript', f, :transcripts, class: "btn btn-success add-transcript-button" %>
      </div>
 <% end %>

那么这就是profile/_transcript_fields.html.erb部分的:

<div class="nested-fields form-inline">
    <label class="col-lg-3 control-label">Document</label>
    <div class="col-lg-6">
      <%= f.file_field :url, class: 'col-lg-4 form-control' %>
      <%= f.input_field :url_cache, as: :hidden, class: 'form-control '%>
    </div>
      <%= link_to_remove_association f, class: 'pull-left' do %>
        <i class="fa fa-trash-o fa-lg"></i>
      <% end %>
</div>

和我的参数profiles_controller.rb看起来像这样:

更新操作

  def update    
    respond_to do |format|
      if @profile.update(profile_params)
        format.html { redirect_to @profile, notice: 'Profile was successfully updated.' }
        format.json { render :show, status: :ok, location: @profile }
      else
        format.html { redirect_to edit_profile_path(@profile), message: @profile.errors.messages }
        format.json { render json: @profile.errors, status: :unprocessable_entity }
      end
    end
  end


def profile_params
  params.require(:profile).permit(:id, :first_name, :last_name, transcripts_attributes: [:id, :url, :name, :transcript, :remove_transcript, :transcript_cache, :_destroy])
end

这是“成功”Profile#Update 操作后日志的样子:

Started PATCH "/profiles/rebecca-nitzsche-st-george-s-college" for ::1 at 2016-10-20 11:27:13 -0500
Processing by ProfilesController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"co0wAnec+xURD0Lw==", "profile"=>{"remove_avatar"=>"0", "avatar_cache"=>"", "first_name"=>"Rebecca", "last_name"=>"Nitzsche", "dob(3i)"=>"1", "dob(2i)"=>"10", "dob(1i)"=>"1998", "transcripts_attributes"=>{"0"=>{"url"=>#<ActionDispatch::Http::UploadedFile:0x007ff63fb9ae00 @tempfile=#<Tempfile:/var/folders/0f/hgplttnd7dg6q9m62qtbnpn00000gn/T/RackMultipart20161020-34279-42ou4z.pdf>, @original_filename="Analysis of Blackboard.pdf", @content_type="application/pdf", @headers="Content-Disposition: form-data; name=\"profile[transcripts_attributes][0][url]\"; filename=\"Analysis of Blackboard.pdf\"\r\nContent-Type: application/pdf\r\n">, "url_cache"=>"", "_destroy"=>"false", "id"=>"1"}, "1"=>{"url_cache"=>"", "_destroy"=>"false"}}      Profile Load (3.1ms)  SELECT  "profiles".* FROM "profiles" WHERE "profiles"."slug" = $1 ORDER BY "profiles"."id" ASC LIMIT $2  [["slug", "rebecca-nitzsche-st-george-s-college"], ["LIMIT", 1]]
  Grade Load (1.6ms)  SELECT "grades".* FROM "grades" WHERE "grades"."profile_id" = 7
  HABTM_Positions Load (1.7ms)  SELECT "positions_profiles".* FROM "positions_profiles" WHERE "positions_profiles"."profile_id" = 7
  Achievement Load (1.3ms)  SELECT "achievements".* FROM "achievements" WHERE "achievements"."profile_id" = 7
  Video Load (1.5ms)  SELECT "videos".* FROM "videos" WHERE "videos"."profile_id" = 7
  Transcript Load (1.3ms)  SELECT "transcripts".* FROM "transcripts" WHERE "transcripts"."profile_id" = 7
Unpermitted parameter: url_cache
Unpermitted parameter: url_cache
Unpermitted parameter: url_cache
Unpermitted parameter: url_cache
   (0.9ms)  BEGIN
  Position Load (1.3ms)  SELECT "positions".* FROM "positions" WHERE 1=0
  SQL (6.1ms)  UPDATE "profiles" SET "updated_at" = $1, "avatar" = $2 WHERE "profiles"."id" = $3  [["updated_at", 2016-10-20 16:27:13 UTC], ["avatar", "Akeem_Robotham.jpg"], ["id", 7]]
  SQL (3.4ms)  UPDATE "transcripts" SET "url" = $1, "updated_at" = $2 WHERE "transcripts"."id" = $3  [["url", "Analysis_of_Blackboard.pdf"], ["updated_at", 2016-10-20 16:27:13 UTC], ["id", 1]]
  SQL (5.2ms)  INSERT INTO "transcripts" ("profile_id", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"  [["profile_id", 7], ["created_at", 2016-10-20 16:27:14 UTC], ["updated_at", 2016-10-20 16:27:14 UTC]]
   (93.4ms)  COMMIT
Redirected to http://localhost:3000/profiles/rebecca-nitzsche-st-george-s-college
Completed 302 Found in 1030ms (ActiveRecord: 120.7ms)

记录是这样的:

[30] pry(main)> t
=> #<Transcript:0x007f8d62d611f8 id: 1, profile_id: 7, url: "Analysis_of_Blackboard.pdf", name: nil, created_at: Thu, 20 Oct 2016 16:03:29 UTC +00:00, updated_at: Thu, 20 Oct 2016 16:27:13 UTC +00:00>

Edit 1

所以问题是我无法按照典型的 Carrierwave 指令正确访问已安装的对象。

这是一个例子:

[42] pry(main)> t
=> #<Transcript:0x007f8d62d611f8 id: 1, profile_id: 7, url: "Analysis_of_Blackboard.pdf", name: nil, created_at: Thu, 20 Oct 2016 16:03:29 UTC +00:00, updated_at: Thu, 20 Oct 2016 16:27:13 UTC +00:00>
[43] pry(main)> t.url
=> "Analysis_of_Blackboard.pdf"
[44] pry(main)> t.url.url
NoMethodError: undefined method `url' for "Analysis_of_Blackboard.pdf":String
from (pry):44:in `__pry__'
[45] pry(main)> t.transcript
=> #<TranscriptUploader:0x007f8d5fdf3f38
 @model=
  #<Transcript:0x007f8d62d611f8
   id: 1,
   profile_id: 7,
   url: "Analysis_of_Blackboard.pdf",
   name: nil,
   created_at: Thu, 20 Oct 2016 16:03:29 UTC +00:00,
   updated_at: Thu, 20 Oct 2016 16:27:13 UTC +00:00>,
 @mounted_as=:transcript>
[46] pry(main)> t.transcript.url
=> nil
[47] pry(main)> t.transcript_identifier
=> nil
[48] pry(main)> t.transcript.identifier
=> nil
[49] pry(main)> t.transcript.current_path
=> nil
[50] pry(main)> t.identifier
NoMethodError: undefined method `identifier' for #<Transcript:0x007f8d62d611f8>
from .rvm/gems/[email protected] /cdn-cgi/l/email-protection/gems/activemodel-5.0.0.1/lib/active_model/attribute_methods.rb:433:in `method_missing'
[51] pry(main)> t.current_path
NoMethodError: undefined method `current_path' for #<Transcript:0x007f8d62d611f8>
from /.rvm/gems/[email protected] /cdn-cgi/l/email-protection/gems/activemodel-5.0.0.1/lib/active_model/attribute_methods.rb:433:in `method_missing'

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过嵌套表单和载波上传似乎不起作用 的相关文章

  • Capistrano 和 XSendFile 配置

    我正在尝试使用 Apache 2 2 Passenger 4 0 59 和 XSendFile 0 12 配置 Rails 生产服务器 应用程序通过 Capistrano 部署 部署的应用程序生成 可能很大 PDF Rails root t
  • Rails 3 + angularjs + 缩小在生产中不起作用:未知提供者:eProvider

    我已遵循我能找到的所有修复缩小的说明 例如 var MyController function renamed scope renamedGreeter MyController inject scope greeter and someM
  • 如何在 Rails 测试中测试 params 哈希?

    以下内容会生成错误 未定义的局部变量或方法 params assert equal params recipient id users one id 如何测试参数哈希 另外 你如何测试assert redirect当存在参数时 参数附加到
  • 遵循 http://ruby.railstutorial.org/ 教程时出现 RSpec 错误

    我到处搜索但似乎找不到解决方案 我一直在关注有关的教程http ruby railstutorial org http ruby railstutorial org 我在第 3 章中尝试使用 rspec spec 执行测试 但是我不断收到以
  • Rails 控制台无法运行

    rbenv 红宝石版本 2 6 6 导轨版本 5 1 4 我正在较旧的代码库中工作 ruby 2 6 6 rails 5 4 1 这是我每天使用的代码库 我必须通过 rbenv 下载一个新的 ruby 版本作为单独的存储库 这样做在我的旧代
  • 如何使用 Rspec 测试具有嵌套路由的控制器?

    我有 2 个使用轨道脚手架生成器创建的控制器 我希望它们嵌套在一个名为 demo 的文件夹中 所以运行 rails g scaffold demo flows rails g scaffold demo nodes 然后我决定将节点嵌套在流
  • Rails 4 应用程序...在开发环境中,除非刷新页面,否则 javascript 不会触发

    所以我的第一个rails4应用程序遇到了一个奇怪的问题 除非我重新加载页面 否则我的页面javascript不会触发 对于我的 asset pipeline JS 和 content for JS 来说都是如此 在我的 assets jav
  • 使用 rspec 测试嵌套路由

    我正在尝试使用 rspec 测试路由 以下给出了 预期块返回真值 的错误 我不确定我错过了什么 通过浏览器我可以发布到这个网址并且成功 有任何想法吗 谢谢 Routes resources forum topics do resources
  • 如何向 Rails 应用程序添加自定义字体?

    我想在 RoR 应用程序中使用几种字体 但它们的格式主要是 ttf 和 otf 等 我该如何将这些文件嵌入到我的 Rails 应用程序中 也就是说 一旦我将它们放入我的资产文件夹中 将它们嵌入我的 CSS 和 或 LESS 文件中的语法到底
  • 来自控制器的 Rails 验证

    有一个联系页面 可以输入姓名 电话 电子邮件和消息 然后发送到管理员的电子邮件 没有理由将消息存储在数据库中 问题 如何 在控制器中使用 Rails 验证 根本不使用模型 或者 在模型中使用验证 但没有任何数据库关系 UPD Model c
  • 使用rSpec 测试delayed_job 链的最佳方法是什么?

    目前 当我的代码中有一个延迟方法时 如下所示 CommentMailer delay deliver comments comment true 我在规范中写了这样的内容 dj mock DelayProxy CommentMailer s
  • Rails 安全:完全避免大规模分配

    我倾向于不需要批量分配 http guides rubyonrails org security html mass assignment我的生产代码中的功能 在我的测试代码中 我经常使用它 但在这些情况下我do想要设置任意列 因此 如果在
  • 为 RoR 中的每个用户创建新的 URL 路径

    如何在 Ruby on Rails 中实时创建新的 URL 路径 例如 我希望我的用户拥有 name XXX com 或 XXX com name 仅供参考 我在 Heroku 上托管代码 看看 subdomain fu 插件 https
  • 仅针对 Rake 任务运行初始化程序

    我希望在执行 Rake 任务时运行某个初始化程序 但在运行 Rails 服务器时不运行 区分 Rake 调用和服务器调用的最佳方法是什么 Rake 允许您指定任务的依赖关系 最好的建议操作是将特定于 rake 的初始化放入其自己的任务中 而
  • Rails 3:如何让用户在表单中至少选择一个复选框?

    我有一个表单 用户在提交表单之前必须选中至少一个复选框 有没有任何插件可以处理这个问题或者jquery可以应用于我的表单 不幸的是我完全是一个 jquery 菜鸟 上面的所有答案都显示了如何在客户端执行此操作 这确实可能更好 正如您的问题标
  • 如何配置database.yml以部署到Heroku

    我最近升级到了最新版本的Rails 并且不明白如何将应用程序部署到Heroku 这是我的database yml file default default adapter postgresql pool 5 timeout 5000 dev
  • PHP 的脚手架 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 PHP 中有什么东西可以像 Rails 一样创建基本的脚手架吗 编辑 我需要一些东西来快速原型化 一些框架比如Symfony http www sym
  • Ruby on Rails - 运行 Cucumber 时出错:您已经激活了 activesupport 3.2.1,但您的 Gemfile 需要 activesupport 3.1.0。

    我知道这个问题之前已经以一种或另一种形式被问过 但我仍然无法为此找到可行的解决方案 我正在学习在线提供的 saas 课程 代码是直接从https github com saasbook hw3 rottenpotatoes https gi
  • 如何准确地衡量加载模型所需的时间?

    我想对加载模块 find by id 234 调用 所需的时间进行基准测试 另外 我如何跟踪加载页面所需的时间 我知道我在运行 Rails 服务器时得到此信息 但这是在调试模式下 我想要生产速度基准 可能吗 为了快速检查 我强烈建议检查基准
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行

随机推荐