小编pat*_*vey的帖子

Rails:activeadmin重写创建操作

我有一个activeadmin资源,它具有belongs_to:user关系.

当我在活动管理员中创建模型的新实例时,我想将当前登录的用户关联为创建实例的用户(我想象的非常标准的东西).

所以......我得到了它:

controller do
  def create
    @item = Item.new(params[:item])
    @item.user = current_curator
    super
  end 
end 
Run Code Online (Sandbox Code Playgroud)

但是;)我只是想知道这是如何工作的?我只是希望将@item变量分配给用户,然后调用super将起作用(并且确实如此).我也开始浏览宝石,但看不出它是如何工作的.

任何指针都会很棒.我假设这是InheritedResources给你的东西?

谢谢!

ruby-on-rails inherited-resources activeadmin

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

Rails设计:设置密码重置令牌并重定向用户

在我的特定用例的应用程序中,我创建了一个新用户(以编程方式设置密码)并向他们发送确认电子邮件.

我希望他们能够在确认后立即更改密码(无需输入系统生成的密码,我不想发送它们)

实际上我想
1)系统使用生成的密码创建一个新的用户帐户.
2)系统发送确认电子邮件.
3)用户点击确认并被重定向以输入他们的密码(有效地将他们发送到如下的URL)

<a href="http://localhost:3000/users/password/edit?reset_password_token=v5Q3oQGbsyqAUUxyqLtb">Change my password</a>
Run Code Online (Sandbox Code Playgroud)

任何帮助/指针都会很棒.

ruby-on-rails login-control devise

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

Selenium IDE - 未触发JQuery onclick处理程序

我正在尝试使用FF Selenium IDE插件测试页面.

有如下菜单结构..

<ul class="parent">
   <li class="child"><span><a href="something.html">link text</a></span></li>
   <li class="child"><span><a href="somethingelse.html">other text</a></span></li>
<ul>
Run Code Online (Sandbox Code Playgroud)

li元素具有绑定到它们的悬停事件.这些悬停事件在实际链接标记上注册了一个click事件.(我已经删除了一些JavaScript以简化)

  var menu = $('ul.parent');

  $("> li.child", menu).hover(function () {

    $(this).find('> a').click(function () {             
      $(this).parent().addClass('active-trail');
      return false;
    });
  }, function() {});
Run Code Online (Sandbox Code Playgroud)

如果使用Selenium我单击其中一个链接然后我希望调用该处理程序.它不是,只是简单地执行了点击(然后是链接,而不是返回false).

我尝试过(在阅读其他答案之后)mouseUp和mouseDown.我还尝试使用fireEvent首先将鼠标悬停在li上(以激活悬停事件),然后使用另一个fireEvent来单击锚点..但这也无效.

所以任何帮助都将是最受欢迎的.只是使用Selenium触发jquery提供的点击处理程序的基本演示可能足以让我看到正确的!

谢谢,帕特里克.

javascript jquery selenium

5
推荐指数
1
解决办法
5011
查看次数

为自定义类设置 yaml_column_permissed_classes 的正确方法

由于此安全建议,序列化属性需要使用 YAML.safe_load 和允许类的安全列表。

我遇到的问题是我想使用自定义类 (Foo::Bar) 并且至少在 Rails 6.1 中您需要在application.rb.

    config.active_record.yaml_column_permitted_classes = [
      Symbol,
      String,
      Foo::Bar
    ]
Run Code Online (Sandbox Code Playgroud)

问题是,在内部运行它(按原样)application.rb会出现以下错误:

 uninitialized constant AppName::Application::Foo (NameError)
Run Code Online (Sandbox Code Playgroud)

如果我添加到 require 语句的顶部application.rb,那么应用程序可以正常启动,但是,在开发中我会收到警告(因为类及其常量被重新定义)

 uninitialized constant AppName::Application::Foo (NameError)
Run Code Online (Sandbox Code Playgroud)

我发现的唯一干净的方法是根本不使用配置,你只需设置 Rails真正想要设置的内容,这就是 ->

 warning: previous definition of SomeConstant was here
Run Code Online (Sandbox Code Playgroud)

这不会产生任何错误,但是,感觉就像我超出了 Rails 希望我做的事情。

是否有正确的方法来初始化自定义类application.rb

ruby-on-rails rails-activerecord ruby-on-rails-6.1

4
推荐指数
1
解决办法
2955
查看次数

Rails:表单对象在 activemodel 上找不到 I18n(命名空间问题)

我有一个表单对象(rails 3),我正在尝试使用config/locales/en.yml错误消息。

我的表单对象如下所示:

class Users::PasswordAndLoginUpdatingForm
  include Virtus.model

  extend ActiveModel::Naming
  include ActiveModel::Conversion
  include ActiveModel::Validations

  attribute :requested_email_address, String
  validates :requested_email_address, allow_blank: true, format: { with: User::VALID_EMAIL_REGEX }
Run Code Online (Sandbox Code Playgroud)

在我的形式中我有通常的

form_for @form_object ... do |f|
Run Code Online (Sandbox Code Playgroud)

如果我pry进去并找出f.object_name我会得到什么users_password_and_login_updating_form

最后,我的config/locales/en.yml样子是这样的:

en:
  activemodel:
    errors:
      models:
        users_password_and_login_updating_form:
          attributes:
            requested_email_address:
              invalid: "bar"
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,我无法让它使用国际化。

forms ruby-on-rails rails-i18n

3
推荐指数
1
解决办法
1313
查看次数

rails 3:在验证失败后的fields_for排序

在我的控制器创建方法中,我使用accepts_nested_attributes创建父和子(ren)对象.一切正常.

子项具有正确设置的排序属性.

但是,当验证失败时(对于缺少的属性说),当fields_for方法运行时,不会保留子对象的顺序.

我尝试过使用parent.children.reorder("订购ASC"),但这不起作用......

我很乐意发布任何代码,如果它让事情更清楚!

def create
  @parent = Parent.new(params[:parent])

  respond_to do |format|
    if @parent.save
      format.html 
    else
      @parent.children.reorder("ordering ASC")  #this makes no difference
      format.html { render :action => "new" }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

并以部分形式

<%= f.fields_for :children do |ff| %>
  <%= render "child_fields", :ff => ff %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

任何指针都会很棒..

ruby-on-rails nested-attributes fields-for

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

将字符串(表示 UTF-8 十六进制)转换为字符串

我有一个 UTF-8 十六进制字符串,如下所示:

s = "0059006F007500720020006300720065006400690074002000680061007300200067006F006E0065002000620065006C006F00770020003500200064006F006C006C006100720073002E00200049006600200079006F00750020006800610076006500200061006E0020004100640064002D004F006E0020006F007200200042006F006E0075007300200079006F007500720020007200650073006F00750072006300650073002000770069006C006C00200077006F0072006B00200075006E00740069006C0020006500780068006100750073007400650064002E00200054006F00200074006F00700020007500700020006E006F007700200076006900730069007400200076006F006400610066006F006E0065002E0063006F002E006E007A002F0074006F007000750070"
Run Code Online (Sandbox Code Playgroud)

我想将其转换为实际的 UTF-8 字符串。它应该是:

您的信用额度已低于 5 美元。如果您有附加组件或奖励,您的资源将一直有效直至耗尽。立即充值,请访问 Vodafone.co.nz/topup

这有效:

s.scan(/.{4}/).map { |a| [a.hex].pack('U') }.join
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更好的方法来做到这一点:我是否应该使用Encoding#convert

ruby utf-8 string-decoding

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