标签: ruby-on-rails-6

为什么redirect_to在创建操作中不起作用?

Rails 初学者,\n不知何故,我找不到在创建记录后重定向用户的方法。

\n\n

我有这个控制器:

\n\n
  def create\n    @product = Product.new(product_params)\n\n    respond_to do |format|\n      if @product.save\n        format.html { redirect_to @product, notice: \'Product successfully created\' }\n      else\n        format.html { render :new, notice: \'Error\' }\n      end\n    end\n  end\n\n  def product_params\n    params.require(:product).permit(:name, :description, :price, :quantity, :status, :image)\n  end\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试过一些变体,例如redirect_to product_path(@product)删除format块,但没有任何效果。用于提交值的模型和表单似乎有效(验证已通过,记录已保存)。

\n\n

日志:

\n\n
Parameters: {"..."}\n  User Load (0.2ms)  SELECT ....\n  \xe2\x86\xb3 app/controllers/application_controller.rb:15:in \'admin?\'\n   (0.1ms)  BEGIN\n  \xe2\x86\xb3 app/controllers/products_controller.rb:24:in \'block in create\'\n  Product Exists? (0.4ms)  SELECT 1 ...\n  \xe2\x86\xb3 app/controllers/products_controller.rb:24:in \'block …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-6

2
推荐指数
1
解决办法
1038
查看次数

Webpacker 编译失败 - 错误:[Errno 21] 是目录:'bin'

我刚刚开始使用 Docker,一切都在顺利进行,直到我尝试访问我的超级基本应用程序的页面。我懂了:

web_1    | [Webpacker] Compiling...
web_1    | [Webpacker] Compilation failed:
web_1    | ERROR: [Errno 21] Is a directory: 'bin'
web_1    | CRITICAL:root:Traceback (most recent call last):
web_1    |   File "/usr/lib/python2.7/dist-packages/cliapp/app.py", line 182, in _run
web_1    |     self.settings.load_configs()
web_1    |   File "/usr/lib/python2.7/dist-packages/cliapp/settings.py", line 829, in load_configs
web_1    |     self._read_ini(pathname, f)
web_1    |   File "/usr/lib/python2.7/dist-packages/cliapp/settings.py", line 838, in _read_ini
web_1    |     cp.readfp(f)
web_1    |   File "/usr/lib/python2.7/ConfigParser.py", line 324, in readfp
web_1    |     self._read(fp, filename)
web_1    |   File "/usr/lib/python2.7/ConfigParser.py", line 512, in …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails docker webpacker ruby-on-rails-6

2
推荐指数
1
解决办法
2081
查看次数

如何自定义 simple_form 的 rich_text_area 中的行数?

我正在SimpleForm 5.0.2与 ActionText 一起使用。

我希望表单的主体字段为多行(比如 10 行),但我不知道如何让它工作。

这是我目前的尝试:

<%= f.rich_text_area :body, class: 'form-control', name: "article-text", input_html: { rows: 10 }, placeholder: "Enter your article body here..." %>
Run Code Online (Sandbox Code Playgroud)

这会生成以下 HTML:

<trix-editor class="form-control" input_html="{:rows=>10}" placeholder="Enter your article body here..." id="article_body" input="article_body_trix_input_article" data-direct-upload-url="http://localhost:3000/rails/active_storage/direct_uploads" data-blob-url-template="http://localhost:3000/rails/active_storage/blobs/:signed_id/:filename" contenteditable="" role="textbox" trix-id="1" toolbar="trix-toolbar-1"></trix-editor>
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

简单形式富文本区域

请注意,我还尝试了各种迭代input_html:,包括但不限于:

<%= ... input_html: { 'rows': '10' } ... %>

<%= ... input_html: { rows: "10" } ... %>
Run Code Online (Sandbox Code Playgroud)

一切都无济于事。

我怎样才能让它发挥作用?

ruby-on-rails simple-form trix ruby-on-rails-6 actiontext

2
推荐指数
1
解决办法
2993
查看次数

部署到 Heroku 失败。移动文件与节点版本不兼容

我正在努力将新的 Rails 6 应用程序部署到 Heroku。它在我本地运行良好。在部署过程中,我收到以下输出。

不幸的是,我对 webpack 和 Yarn 还很陌生。这似乎是 move-file 的版本/依赖关系问题,而 move-file 又似乎是 webpacker 的依赖关系。但是,我不知道如何解决这个问题。

似乎可以归结为这一行:

error move-file@2.0.0: The engine "node" is incompatible with this module. Expected version ">=10.17". Got "10.15.3"
Run Code Online (Sandbox Code Playgroud)

但是,节点不是我的节点模块之一,但似乎是已安装的二进制文件。当我跑步时

node - v
Run Code Online (Sandbox Code Playgroud)

我得到:v12.16.1

任何帮助将不胜感激。

remote:        Removing bundler (2.0.2)
remote:        Bundle completed (201.39s)
remote:        Cleaning up the bundler cache.
remote: -----> Installing node-v10.15.3-linux-x64
remote: -----> Installing yarn-v1.16.0
remote: -----> Detecting rake tasks
remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        yarn install …
Run Code Online (Sandbox Code Playgroud)

heroku precompile node.js yarnpkg ruby-on-rails-6

2
推荐指数
1
解决办法
1737
查看次数

ActionController::RoutingError(没有路由匹配 [GET]“/serviceworker.js”):

安装好的导轨6.0.3。Ran rails new [app],启动服务器,加载主页,服务器日志显示此路由错误。有任何想法吗?这是我没有碰过的路线文件。

Rails.application.routes.draw do
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails service-worker ruby-on-rails-6

2
推荐指数
1
解决办法
2084
查看次数

Rails 6:如何有条件地验证关联的存在?

我有以下2个型号:

class Offer < ApplicationRecord
  has_many :bookings
end

class Booking < ApplicationRecord
  belongs_to :offer
end
Run Code Online (Sandbox Code Playgroud)

当我尝试保存没有 Offer_id 的 Booking 对象时,Rails 会抛出验证错误“需要 Offer”。

但我不会主动验证关联对象是否存在(我打算稍后为此关联添加条件验证)。

这是否意味着 Rails 6 默认情况下会验证所有关联的存在?如果是,我怎样才能使这样的验证成为有条件的?

validation associations ruby-on-rails-6

2
推荐指数
1
解决办法
1770
查看次数

如何在 Rails 6 上生成 master.key?

如何让 Rails 生成主密钥?我希望它在生产环境中解密凭据文件。

这就是我尝试生成新密钥的方法:

config$ rm credentials.yml.enc 
config$ EDITOR=vim rails credentials:edit
File encrypted and saved.
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails-6

2
推荐指数
1
解决办法
3117
查看次数

如何给form_with添加隐藏字段?

我正在尝试将隐藏字段添加到form_with.

以下是 3 次尝试(以及结果/错误消息)

第一次尝试

来自: https: //guides.rubyonrails.org/form_helpers.html

<%= hide_field_tag(:parent_id, "5") %>

所以我尝试:

<%= form_with(model: @message, method: :post) do |f| %> 
<%= f.label :body %> 
<%= f.text_area :body %> 
<%= f.hidden_field_tag :user_id, current_user.id %>
<%= f.submit "Send", class: "btn btn-primary" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

第二次尝试

来自: https: //api.rubyonrails.org/v6.0.3/classes/ActionView/Helpers/FormHelper.html#method-i-hidden_ ​​field

示例:hidden_​​field(:signup, :pass_confirm)

所以我尝试

<%= f.label :body %> 
<%= f.text_area :body %> 
<%= f.hidden_field :user_id, current_user.id %>
<%= f.submit "Send", class: "btn btn-primary" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

第三次尝试

这比其他两次尝试更进一步,因为至少显示视图加载而不是出错。 …

ruby-on-rails ruby-on-rails-6 form-with

2
推荐指数
1
解决办法
2824
查看次数

has_one 与可选关联:true?

在一个简单的预订应用程序中:

  • 当用户选择座位时,TempAppointment会创建一个。
  • 支付座位费用后,将根据 TempAppointment 记录中的信息创建约会。

无法首先创建约会记录,因为乘客可能不付款,在这种情况下,临时约会保持不变,并且永远不会创建关联的约会记录。

我的自然想法是 TempAppointment has_one Appointment (有效),但是当我添加时optional: true,我看到错误

class TempAppointment < ApplicationRecord
  has_one :appointment, optional: true 
end
Run Code Online (Sandbox Code Playgroud)

尝试创建一个新的临时约会

ta = TempAppointment.new(cruise_id: 1, passenger_id: 1, start_time: start_time, end_time: start_time + 3600)
ArgumentError: Unknown key: :optional. Valid keys are: :class_name, :anonymous_class, :foreign_key,
 :validate, :autosave, :foreign_type, :dependent, :primary_key, :inverse_of, :required, :as, :touch
Run Code Online (Sandbox Code Playgroud)

为什么不能has_one与 一起工作optional: true

activerecord ruby-on-rails has-one ruby-on-rails-6

2
推荐指数
1
解决办法
7835
查看次数

cancancan 如何设置模型实例,以及如何检查它?

我注意到用户可以访问他们不应该访问的操作。

我在 Rails 控制台中用类似的东西进行了调试

user = User.first 
physician = Physician.first 
ability = Ability.new(user)
ability.can?(:send_message, physician)
# => false
Run Code Online (Sandbox Code Playgroud)

上面说用户无法访问该医生的 send_message 操作,这是所需的行为,但我知道他们可以在应用程序中!

认为这缩小了 cancancan 由于某种原因加载错误模型实例的问题的原因。cancan 文档中也暗示了这一点:

注意:这假设模型实例已正确加载。

但问题是我不确定如何从这里诊断问题,因为控制台说它应该可以工作。我不知道如何查看cancancan设置的模型实例,也不知道还能尝试什么。

有任何想法吗?

更新

我确实设法通过authorize! :send_message, physician在控制器中使用来解决这个问题,由于我只是偶然发现了这种行为,我认为弄清楚为什么加载了错误的模型实例更为重要(特别是这样我可以看看这是否是其他地方也发生过)。

我弄清楚了为什么会发生这种情况(但我仍然不知道如何诊断它)

我认为发生这种情况是因为我有很多自定义操作,有些有@physician = Physician.find(current_user.physician.id)(即他们是当前用户),而其他则更像是@physician = Physician.find_by_id(physician_params[:id]). 我不确定cancan如何设置实例模型,但我知道它不是通灵的,所以它不知道是否将其设置为当前用户的医生实例,或者传入的医生id的医生实例。

剩下什么?

cancancan 如何为自定义方法设置模型实例(我认为它会尝试一些方法,如果不起作用,则尝试其他方法,等等)?

有帮助的小注释:

  • load_and_authorize_resource 确实尝试加载模型实例以进行非 RESTful 操作
  • 文档中的一些有用信息
  • 可能和我的经历有关系:

当我返回鼻涕虫时,它打破了这种行为,我可以编辑所有神奇宝贝。

ruby-on-rails cancan cancancan ruby-on-rails-6

2
推荐指数
1
解决办法
1215
查看次数