Ruby on Rails是一个用Ruby编写的开源全栈Web应用程序框架。它遵循流行的MVC框架模型,并以其“面向配置的约定”方法应用程序开发而闻名。
如何在 Rails 中将“turbo:frame-load”事件与 Hotwire 和 Stimulus 一起使用?
我试图在 Turbo 框架完成更新时触发刺激事件。在我的 Rails 应用程序中,设置如下。 在视图中(我在这里使用 slim ): div data-controller =“记录器...
伙计们,我正在尝试将我的应用程序连接到外部数据库来使用它。 我在文件末尾的database.yml 中添加了配置。 外部数据库: 适配器:postgresql 编码:utf8 数据库:d...
Rails5 不支持直接继承 ActiveRecord::Migration。魔法宝石
我正在尝试迁移 Rails 3 应用程序。我使用 RVM 安装了 Rails v 5.1.5。 尝试 db:migrate 时,我得到以下信息。 耙子中止! StandardError:发生错误,以后的所有迁移都可以...
在部署时找不到 rake-11.3.0(Capistrano Nginx Passenger)
最近将旧的 Web 应用程序更新到 Rails 4.2.7.1 和 Ruby 2.3.1(它与 Rails 3 和 Ruby 1.9 一起使用)。 使用 rvm 在生产环境中的 nginx-passenger 服务器上运行的应用程序。 更新了 RVM 和 ruby 中的
使用 Ruby:2.3.1p112 和 Rails:3.2.12 我正在尝试在我的控制器中调用演示方法。所以,在我的 _form.html.erb 中我有: <%= link_to 'Demo', "/admin/clinics/"+@clinic.id.to_s+"/demo" %> ...
在 Rails 中,如何拥有 /admin 部分,然后在管理部分中拥有控制器?
我想在我的应用程序中有一个 /admin 部分,并在此 /admin 部分中有路由,例如: www.example.com/admin/(只有某些用户可以访问此部分) 然后将控制器放入
我有以下两个涡轮流视图: # flash.turbo_stream.erb <%= turbo_stream.append "flash", partial: "layouts/flash" %> # 创建.turbo_stream.erb <%= turbo_stream.
问题 如何编写 rswag 规范,将 my_field: 'my_value' 传递到控制器的 GET 请求参数中? 初步尝试 配置/routes.rb: Rails.application.routes.draw 做 命名空间...
`ActiveModel::MissingAttributeError` 最近添加的列
注意:有很多关于 SO 的旧 Q/A,其中人们要么 (1) 尝试设置关联的 has_one_id 列,或 (2) 设置计数器缓存的计数列,或 (3) 设置它在...
我正在使用一个 API(让我们假设它是 facebook)来收集两个给定日期之间的数据。由于 API 限制(像大多数一样),我一次只能抓取这么多,因此必须分页......
我有一个包含选择和文本字段的表单(您可以选择一种媒体类型或创建一个): <%= form.label :media_type_id, style: "display: block" %> <%= form. 我有一个包含选择和文本字段的表单(您可以选择一个 MediaType 或创建一个): <div> <%= form.label :media_type_id, style: "display: block" %> <%= form.collection_select :media_type_id, MediaType.all, :id, :name, :prompt => "Select a Media Type" %> or create one: <%= form.text_field :new_media_type_name %> </div> 模型代码包含支持new_media_type_name的内容: class Medium < ApplicationRecord has_many :authorships has_many :authors, through: :authorships belongs_to :book_genre belongs_to :media_type attr_accessor :new_media_type_name before_save :create_media_type_from_name def create_media_type_from_name create_media_type(:name => new_media_type_name) unless new_media_type_name.blank? end end 这一切在控制台中都可以正常工作: irb(main):001> m = Medium.new => #<Medium:0x00007f9c867307d8 ... irb(main):002> m.create_media_type(:name => "Test") TRANSACTION (1.1ms) BEGIN MediaType Create (2.1ms) INSERT INTO "media_types" ("name", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["name", "Test"], ["created_at", "2024-09-29 01:06:50.826184"], ["updated_at", "2024-09-29 01:06:50.826184"]] TRANSACTION (17.3ms) COMMIT => #<MediaType:0x00007f9c86cb6270 id: 6, name: "Test", created_at: Sun, 29 Sep 2024 01:06:50.826184000 UTC +00:00, updated_at: Sun, 29 Sep 2024 01:06:50.826184000 UTC +00:00> 但是从浏览器运行应用程序不会保存新的MediaType。 这是我在运行的输出中看到的内容rails s: Started POST "/media" for 192.168.1.142 at 2024-09-28 17:34:33 -0500 Processing by MediaController#create as HTML Parameters: {"authenticity_token"=>"[FILTERED]", "medium"=>{"title"=>"The New Test", "country"=>"Canada", "published_on"=>"2024-09-05", "media_type_id"=>"", "new_media_type_name"=>"Spaceship", "book_genre_id"=>"3", "summary"=>"The summary", "cover_art_path"=>"", "isbn"=>""}, "commit"=>"Create Medium"} TRANSACTION (0.8ms) BEGIN ↳ app/controllers/media_controller.rb:26:in `create' BookGenre Load (1.2ms) SELECT "book_genres".* FROM "book_genres" WHERE "book_genres"."id" = $1 LIMIT $2 [["id", 3], ["LIMIT", 1]] ↳ app/controllers/media_controller.rb:26:in `create' TRANSACTION (0.9ms) ROLLBACK ↳ app/controllers/media_controller.rb:26:in `create' Rendering layout layouts/application.html.erb Rendering media/new.html.erb within layouts/application MediaType Load (1.3ms) SELECT "media_types".* FROM "media_types" ↳ app/views/media/_form.html.erb:35 BookGenre Load (1.3ms) SELECT "book_genres".* FROM "book_genres" ORDER BY "book_genres"."name" ASC ↳ app/views/media/_form.html.erb:42:in `map' Rendered media/_form.html.erb (Duration: 48.9ms | Allocations: 8316) Rendered media/new.html.erb within layouts/application (Duration: 50.5ms | Allocations: 8853) Rendered layout layouts/application.html.erb (Duration: 85.5ms | Allocations: 20627) Completed 422 Unprocessable Entity in 181ms (Views: 85.5ms | ActiveRecord: 31.2ms | Allocations: 44624) 问题是,保存失败,浏览器中显示的错误始终是“媒体类型必须存在”。 我认为这意味着它无法创建 Medium,除非附加到它的 media_type 已经存在。 但我认为这就是模型中 before_save 块的目的。 求求各位大神们,我错过了什么? 瑞安? 瑞恩·贝茨,你在吗? 更新:我发现如果我在表单中选择media_type同时输入new_media_type_name,它会创建新的media_type并将新的media_type设置为新媒体中的media_type参考对象。 要在 Rails 中创建嵌套记录,您可以使用 accepts_nested_attributes 在模型中创建 setter: class Medium < ApplicationRecord # ... belongs_to :media_type accepts_nested_attributes_for :media_type, reject_if: :all_blank? end 要在表单中创建输入,请使用 fields_for: <div> <div class="field"> <%= form.label :media_type_id, style: "display: block" %> <%= form.collection_select :media_type_id, MediaType.all, :id, :name, prompt: "Select a Media Type" %> </div> <fieldset> <legend>Or create one</legend> <%= form.fields_for(:media_type) do |media_type_form| %> <div class="field"> <%= media_type_form.label :name %> <%= media_type_form.text_input :name %> </div> <% end %> </fieldset> </div> 然后,您可以通过传递哈希选项将控制器中的嵌套属性列入白名单: def medium_attributes params.require(:medium) .permit( :foo, :bar, :baz, media_type_attributes: [:name] ) end
我有一个按钮设置在部分内的部分中,其中控制器设置在最顶层的父视图中。 <%# main.html.erb %> 我有一个按钮设置在部分内的部分中,其中控制器设置在最顶层的父视图中。 <%# main.html.erb %> <div class="classes" data-controller="modal cropper" data-modal-name-value="crop"> <%= render 'front' %> <%= render 'back' %> <%= render 'crop' %> </div> <%# _front.html.erb %> <div> <%# other divs %> <div class="flex justify-between mb-2 mt-2 print-hidden"> <%= form_for(Card.new, remote: true, url: save_photo_path) do |f| %> <label> <p class="font-head text-white opacity-80 hover:opacity-100 hover:text-red cursor-pointer" id="change_front">Change Photo</p> <%= f.file_field :photo, class: "hidden input_front", data: { modal_name_value: "crop", action: "change->modal#toggle change->cropper#preview" } %> </label> <div class="hidden"> <%= f.submit %> </div> <% end %> </div> </div> <%# _crop.html.erb %> <div id="crop_modal" data-modal-target="crop" class="hidden fixed z-50 bg-gray-500 inset-0 overflow-scroll"> <div> <div role="dialog" aria-modal="true" aria-labelledby="modal-headline"> <div> <img id="crop_image" src="" data-cropper-target="preview"> </div> <div class="mt-5 sm:mt-6"> <%# not working! %> <button id="crop" data-controller="cropper" data-action="click->cropper:crop"> Crop </button> </div> </div> </div> </div> 该按钮根本没有连接到我的裁剪机控制器 // cropper_controller.js preview(e) { // this code renders the new image to crop and replaces the placeholder image // also sets this.previewTarget } crop() { console.log('hit') } 如果我在 data-controller="cropper" 内将 _crop.html.erb 设置得更高,则会收到以下错误: controller.ts:20 Error invoking action "change->cropper#preview" Error: Missing target element "preview" for "cropper" controller previewTarget 是必要的,因为它是在预览操作中设置的,稍后会与按钮的 onclick 操作一起保存。我的理解是,既然它已经设置了,它应该仍然可以在按钮内访问。我不知道设置 data-controller="cropper" 是否会初始化控制器的新实例,在这种情况下我的目标将被取消设置,但这无论如何都不起作用。 如何让嵌套 HTML 访问外部控制器?请注意,其他时候我嵌套了这些操作,它们确实有效。我参考了其他 s/o 文章,但似乎没有一篇文章可以帮助解决我遇到的问题(或尚未得到解答) 这是 HTML 输出,尽管渲染后很难阅读: https://jsfiddle.net/x0z1ed6q/1/ <div class="max-w-xl xl:max-w-6xl mx-auto mt-4 sm:mt-12 grid grid-cols-1 xl:grid-cols-2 gap-4 mt-8 mb-12 girl" data-controller="modal cropper" data-modal-name-value="crop" data-cropper-cropper-tool-value='{"element":{},"options":{"viewMode":0,"dragMode":"crop","initialAspectRatio":null,"aspectRatio":null,"data":null,"preview":"","responsive":true,"restore":true,"checkCrossOrigin":true,"checkOrientation":true,"modal":true,"guides":true,"center":true,"highlight":true,"background":true,"autoCrop":true,"autoCropArea":0.8,"movable":true,"rotatable":true,"scalable":true,"zoomable":true,"zoomOnTouch":true,"zoomOnWheel":true,"wheelZoomRatio":0.1,"cropBoxMovable":true,"cropBoxResizable":true,"toggleDragModeOnDblclick":true,"minCanvasWidth":0,"minCanvasHeight":0,"minCropBoxWidth":0,"minCropBoxHeight":0,"minContainerWidth":200,"minContainerHeight":100,"ready":null,"cropstart":null,"cropmove":null,"cropend":null,"crop":null,"zoom":null},"cropped":false,"disabled":false,"pointers":{},"ready":false,"reloading":true,"replaced":false,"sized":false,"sizing":false,"isImg":true,"originalUrl":"blob:http://localhost:3000/8a020546-ee25-4580-80d2-675bb5c3d83d","url":"blob:http://localhost:3000/8a020546-ee25-4580-80d2-675bb5c3d83d","imageData":{},"xhr":{}}' > <div id="crop_modal" data-modal-target="crop" class="fixed z-50 bg-gray-500 inset-0 overflow-scroll"> <div class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"> <div class="inline-block align-bottom bg-white rounded-lg px-4 pt-5 pb-4 text-left overflow-scroll shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full sm:p-6" role="dialog" aria-modal="true" aria-labelledby="modal-headline" > <div> <img id="crop_image" src="blob:http://localhost:3000/8a020546-ee25-4580-80d2-675bb5c3d83d" data-cropper-target="preview" class="cropper-hidden" /> <div class="cropper-container cropper-bg" touch-action="none" style="width: 464px; height: 619px;"> <div class="cropper-wrap-box"> <div class="cropper-canvas" style="width: 464px; height: 618.667px; transform: translateY(0.166667px);"> <img src="blob:http://localhost:3000/8a020546-ee25-4580-80d2-675bb5c3d83d" alt="The image to crop" class="" style="width: 464px; height: 618.667px; transform: none;" /> </div> </div> <div class="cropper-drag-box cropper-crop cropper-modal" data-cropper-action="crop"></div> <div class="cropper-crop-box" style="width: 371.2px; height: 494.933px; transform: translateX(46.4px) translateY(62.0333px);"> <span class="cropper-view-box"> <img src="blob:http://localhost:3000/8a020546-ee25-4580-80d2-675bb5c3d83d" alt="The image to preview" style="width: 464px; height: 618.667px; transform: translateX(-46.4px) translateY(-61.8667px);" /> </span> <span class="cropper-dashed dashed-h"></span><span class="cropper-dashed dashed-v"></span><span class="cropper-center"></span><span class="cropper-face cropper-move" data-cropper-action="all"></span> <span class="cropper-line line-e" data-cropper-action="e"></span><span class="cropper-line line-n" data-cropper-action="n"></span><span class="cropper-line line-w" data-cropper-action="w"></span> <span class="cropper-line line-s" data-cropper-action="s"></span><span class="cropper-point point-e" data-cropper-action="e"></span><span class="cropper-point point-n" data-cropper-action="n"></span> <span class="cropper-point point-w" data-cropper-action="w"></span><span class="cropper-point point-s" data-cropper-action="s"></span><span class="cropper-point point-ne" data-cropper-action="ne"></span> <span class="cropper-point point-nw" data-cropper-action="nw"></span><span class="cropper-point point-sw" data-cropper-action="sw"></span><span class="cropper-point point-se" data-cropper-action="se"></span> </div> </div> </div> <div class="mt-5 sm:mt-6"> <button id="crop" class="inline-flex justify-center w-full rounded-md border border-transparent shadow-sm px-4 py-2 bg-red text-base font-medium text-white hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:text-sm" data-action="click->cropper:crop" > Crop </button> </div> </div> </div> </div> </div> 多么愚蠢的错误 data-action="click->cropper#crop" 我有 data-action="click->cropper:crop"
Rails 7 devise gem 几天后无法使用有效凭据登录
轨道 7 设计 4.9.4(使用 bcrypt (~> 3.0)) 用户无法登录,出现“电子邮件或密码无效”错误。 用户重置密码并可以在几天后使用新密码登录,他/她不能......
我正在尝试在 Rails 7 中实现派生字段。我有一个标签模型。标签有一个前缀、一个循环号和一个可选的后缀。 (是的,我是一名仪器工程师:-)我将这些属性分开......
我正在尝试设置 2 个模型(实体、用户),其中每个用户可以使用多个实体,每个实体可以有多个用户使用它们。我希望这种关系是独一无二的,即......
Rails 4 + Capistrano 3 - 从本地存储库部署到生产服务器
我正在使用 Windows 10 和 Cygwin,并且正在设置 Capistrano 3 以部署到我的生产环境。我相信我已经正确设置了所有内容,但我不知道如何推动我的 lo...
Rails 3.0.2 安装构建失败,并显示“错误:‘maybe_unused’属性无法应用于类型”
我正在开发一个需要使用 x86_64 架构的 ruby 3.0.2 的项目,但我使用的是 M1 macbook (macos 15.0 Sequoia)。我已经使用 openssl 1.1、readline、libyaml...设置了我的开发环境
我非常重视命名,所以我非常努力地为我的 ActiveRecord 模型命名。然而,我经常想出一个名称,它与保留名称有一些冲突,要么我...
我有一个多态连接表,我想使用以下迁移来创建它。 create_table :sourceables 做 |t| t.string :object_type, null: false t.bigint :object_id, null: f...
我想将 CSV 文件导入到数据库中,我的 CSV 文件有以下字符串,我需要将其解析为 Ruby 数组对象,该怎么做? “[\“罗斯基尔山\”、“西尔维娅公园\”...