小编Dan*_*lla的帖子

Action Job/Mailer的'deliver_now`和`deliver_later`之间的区别

ActionJob在Rails中连接的常见模式是使用一个perform()方法设置一个Job,该方法通过perform_now或者异步调用perform_later

在邮件程序的特殊情况下,可以直接打电话deliver_nowdeliver_later因为ActionJob是很好的集成ActionMailer.

轨道文档有以下评论-

# If you want to send the email now use #deliver_now
UserMailer.welcome(@user).deliver_now

# If you want to send the email through Active Job use #deliver_later
UserMailer.welcome(@user).deliver_later
Run Code Online (Sandbox Code Playgroud)

措辞使得它看起来像deliver_now不会使用ActiveJob发送邮件.那是正确的,如果有啥之间真正的差异deliver_nowdeliver_later?一个不是异步的吗?

同样,同样的差异适用于perform_nowperform_later

谢谢!

jobs ruby-on-rails rails-activejob

18
推荐指数
2
解决办法
2万
查看次数

自定义掠夺者参数的表单助手 - Rails

根据Ransack文档,可以将自定义参数传递给 ransacker方法:

class Person < ApplicationRecord
  ransacker :author_max_title_of_article_where_body_length_between, args: [:parent, :ransacker_args] do |parent, args|
    min, max = args
    query = <<-SQL
      (SELECT MAX(articles.title)
       FROM articles
       WHERE articles.person_id = people.id
         AND CHAR_LENGTH(articles.body) BETWEEN #{min.to_i} AND #{max.to_i}
       GROUP BY articles.person_id
      )
    SQL
    Arel.sql(query)
  end
end
Run Code Online (Sandbox Code Playgroud)

在同一文档中甚至还有一个传递自定义参数的示例:

Person.ransack(
  conditions: [{
    attributes: {
      '0' => {
        name: 'author_max_title_of_article_where_body_length_between',
        ransacker_args: [10, 100]
      }
    },
    predicate_name: 'cont',
    values: ['Ransackers can take arguments']
  }]
)
Run Code Online (Sandbox Code Playgroud)

但是,没有关于如何从视图传递自定义参数的文档,因为似乎没有search_form_for帮助程序可以做到这一点。

有没有一种方法可以通过表单传递这些参数,而不需要解析控制器中的参数来执行示例中指出的搜索?

ruby-on-rails ransack ruby-on-rails-5

6
推荐指数
0
解决办法
395
查看次数