Tag: ruby on rails 5

rails中可选的多对多关系?

有没有办法在rails中生成可选的多对多关系? 我有一个Client模型和一个ClientManager模型 – 我希望Client有0个,1个或多个client_managers 。 但我也希望Clientmanger能够拥有0个,1个或更多clients 。 这可能吗? 如何? 使用导轨5。 为了清晰/目的而更新:我希望客户管理员能够管理多个客户端,甚至没有客户端管理员。 客户端可以由0,1或多个客户经理管理

rails 5 form_tag具有原始DB值,并且在表单中进行新选择后,必须更新两个记录

我有一个带有radio_button_tag的form_tag,它填充了来自DB的数据。 它必须简单地定向到自定义更新操作(update_multiple),其中为表单中已更改的所有2条记录更新布尔列。 例如,当最初从DB填充表单并选择记录1的单选按钮时,现在用户将其选择更改为记录3,然后在提交表单标记时必须更新两个记录,但问题是提交时的代码,仅收集现在在该组中选择的记录的ID。如何获取该记录的id也未被选中,以便我可以一次性更新两个这些记录? 如果提交无法处理此操作,那么控制器或表单中是否有一种方法可以在填充表单之前保留初始选定记录的ID? 如您所见,我尝试使用radio_button_tag收集一组ids []。 TIA的帮助。 这是表单代码: Select a CV Resume Name params[:main] %> ‘button’ %> 这是控制器update_multiple代码。 def update_multiple CvAttachment.update_all([“updated_at=?”, Time.now], :id => params[:cv_attachment_ids]) 结束

将保存/更新调用rails转换为sql

我想在运行时生成sql .save 当我在控制台中运行此命令时 irb(main):018:0> a = User.last irb(main):018:0> a.first_name => “Mohan” irb(main):019:0> a.first_name = ‘Sohan’ => “Sohan” irb(main):020:0> a.save (2.0ms) BEGIN SQL (1.4ms) UPDATE `users` SET `first_name` = ‘Sohan’, `updated_at` = ‘2017-02-15 14:00:10’ WHERE `users`.`id` = 1 (31.3ms) COMMIT => true 这实际上更新了记录。 我想知道在不更新记录的情况下生成的sql查询。 我尝试使用.to_sql但这似乎只适用于关系。

Rails 5个多个清单文件的问题

谢谢你的帮助。 我的问题 在我的Rails 5应用程序中,我有2个布局,因此我需要设置多个清单文件。 我做了什么 我做了以下事情: 这两个layouts有一个user.html.erb和一个main.html.erb html文件,我用main.js和main.html.erb main.js链接了正确的标签。 文件加载,如果我按照localhost:3000/assets/application.js显示清单中包含的js文件的完整内容,而在/assets/main.js只显示以下行: (function() { }).call(this); 我遵循以下讨论中包含的说明Rails 4 Assets预编译与多个清单文件 ,但它们不起作用 config.assets.precompile += %w( main.js ) 我搜索了Stackoverflow并阅读了文档,但是没有找到任何答案。 我在用: * rails (5.0.1) * sprockets (3.7.1) * sprockets-rails (3.2.0) 更新 在main.js文件中,我将以下内容作为测试: //= require jquery //= require bootstrap-sprockets //= require jquery.easing 非常感谢你的帮助,我真的希望你能帮助我。 最诚挚的问候Fabrizio Bertoglio

在React迭代中显示最后一个子节点

我正在尝试实现一个消息应用程序,暂时没有ActionCable。 当我映射所有邮件时,我只想显示来自该用户的最后一条消息:我只显示最后一条消息,而不是显示来自用户的所有消息。 我不知道如何实现这一目标。 我以为我可以将key设置为user_id而不是id 。 _messagesRender: function(){ var messages = this.props.message.map( function(m, i){ return( {m.body} ) }); return( {messages.length === 0 ? “No messages” : messages} ) }, 这个组件在索引页面上,我正在尝试创建一个类似消息的应用程序。 任何与React的指针? Rails 5用作后端。 警告:flattenChildren(…):遇到两个孩子用同一把钥匙, .$2 。 子键必须是唯一的; 当两个孩子共用一把钥匙时,只会使用第一个孩子。 后端: @messages = Message.where(to: current_user.id) 消息模型:: :id, :to, :user_id, :body user_id是发送/创建消息的人。

在Rails中显示嵌套资源的错误消息

我正在创建我的第一个应用程序,简单的博客,我不知道如何显示未通过validation的嵌套资源(注释)的错误消息。 这是为评论创建动作: def create @post = Post.find(params[:post_id]) @comment = @post.comments.create(comment_params) redirect_to post_path(@post) end 这是评论表: 我尝试过: def create @post = Post.find(params[:post_id]) @comment = @post.comments.build(comment_params) if @comment.save redirect_to post_path(@post) else render ‘/comments/_form’ end end 和: prohibited this comment from being saved: 但我不知道什么是错的。

Rails 5:NoMethod错误 – 未定义的方法Paginate

我有一个基于Rails 5的JSON API。我有一个方法可以为一个特定的公司提供所有产品的列表,我想分页,以便不会立即显示所有数据。 为此,我遇到了两个gem,即will_paginate和api-pagination 。 运行bundle install并重新启动服务器后,我仍然收到以下错误: NoMethodError (undefined method `paginate’ for #) 产品控制器: require ‘roo’ class Api::V1::ProductsController comp_id, :category_id => cat_id) else product = Product.where(:company_id => comp_id) end paginate json: product, status: 200 else render json: { errors: “Company ID is NULL” }, status: 422 end end end Gemfile.rb source ‘https://rubygems.org’ git_source(:github) do |repo_name| […]

密码validation在两个相反的情况下失败

我正在研究Michael Hartl的Ruby on Rails教程,并产生了一个有趣的困境。 我会做错事,所以我需要你帮忙找到问题。 该问题围绕User模型中的密码属性validation。 该属性的初始validation是: validates :password, presence: true, confirmation: true, length: { minimum: 6 } 这需要最小长度的密码,旨在满足新用户创建其实例的情况。 我已经创建了以下测试(我希望我使用过Rspec!)。 这些测试检查validation是否有效: test “password must not be blank or made up of spaces” do @user.password = @user.password_confirmation = ” ” assert_not @user.valid? end test “password must not be empty/nil” do @user.password = @user.password_confirmation = “” assert_not […]

Rail 5交换带有自定义重新加载器的ActionDispatch :: Reloader

我们有一个用例,用于在本地开发时将模拟引擎安装到进程会话,其中自定义会话中间件在请求通过时通过Net :: http请求调用模拟引擎。 当代码更改时,会触发重新加载器,并在此处调用ActiveSupport::Dependencies以开始卸载。 然后请求传递给我们的自定义会话中间件,并触发http请求。 但是,由于http请求调用可安装的引擎,它再次认为是相同的中间件,并且重新加载器再次卸载所有依赖项,这导致第一次重新加载超时。 因此,目标是能够跳过第二个请求的重新加载。 我在这里向ActionDispatch::Reloader添加了以下代码,它完全符合我的要求。 class Reloader < Executor def initialize(app, executor) super(app, executor) end def call(env) request = ActionDispatch::Request.new(env) return @app.call(env) if skip_request?(request) super(env) end def skip_request?(request) request.path_info.start_with?('/session') end end 然后我想让这个更干净的想法完全把它拉出来一个模块,然后从初始化器中做这样的交换 app.config.middleware.swap(::ActionDispatch::Reloader, MyModule::CustomReloaderMiddleware) 这是模块 require ‘action_dispatch’ module MyModule class CustomReloaderMiddleware < ActionDispatch::Executor def initialize(app, executor) @app, @executor = app, executor end […]

Rails 5渲染位于’views’目录之外的模板

以下代码 def show render File.join(Rails.root, ‘app’, ‘themes’, ‘default_theme’, ‘template’), layout: File.join(Rails.root, ‘app’, ‘themes’, ‘default_theme’, ‘layout’) end 在rails 4.2.x中工作,但在使用Rails 5.0.0时输出以下错误 ActionView::MissingTemplate: Missing template vagrant/app/themes/default_theme/template with {:locale=>[:nl], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby]}. Searched in: * “/vagrant/app/views/themes/default_theme” * “/vagrant/app/views” * “/home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/devise-ebe65b516b38/app/views” * “/home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/devise-i18n-1.1.0/app/views” 看起来它只在’app / views / *’目录中搜索。 有没有办法使用rails 5.0.0渲染位于’views’目录之外的模板,所以它的工作原理就像以前的Rails版本一样?