我有一个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给你的东西?
谢谢!
在我的特定用例的应用程序中,我创建了一个新用户(以编程方式设置密码)并向他们发送确认电子邮件.
我希望他们能够在确认后立即更改密码(无需输入系统生成的密码,我不想发送它们)
实际上我想
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)
任何帮助/指针都会很棒.
我正在尝试使用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提供的点击处理程序的基本演示可能足以让我看到正确的!
谢谢,帕特里克.
由于此安全建议,序列化属性需要使用 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?
我有一个表单对象(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)
我遇到的问题是,我无法让它使用国际化。
在我的控制器创建方法中,我使用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)
任何指针都会很棒..
我有一个 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。
activeadmin ×1
devise ×1
fields-for ×1
forms ×1
javascript ×1
jquery ×1
rails-i18n ×1
ruby ×1
selenium ×1
utf-8 ×1