我有一个引擎(社交流)安装到我的Rails应用程序中.当我运行rake路线时,我得到所有路线,包括已安装的引擎路线.这很有用,但有很多路线.
有没有办法运行rake路由,所以它只返回父应用程序的路由,而不是引擎?我仍然希望能够为引擎运行.
我在工作广告上看到了这个(在SO上):
lambda f: (lambda a: a(a))(lambda b: f(lambda *args: b(b)(*args)))
Run Code Online (Sandbox Code Playgroud)
所以我理解的是它是一个匿名(未命名)函数,它由两个进一步嵌套的匿名函数组成.最里面的函数采用变量的争论列表(*args).
我无法弄清楚它应该做什么.如果没有看到实际的args列表,这实际上是否有效或无法分辨?
在Github wiki中,可以嵌入代码.是否可以通过wiki的repo中的文件名(和行号?)链接到源代码?
理想情况下,如果稍后删除引用的文件,也会显示某种类型的错误.
我看了这些问题,但是他们没有涉及到:
我在一些Rails安装指南中看到了类似的内容。我们在这里到底在做什么?
将默认子域添加到/ etc / hosts,例如:“ 0.0.0.0 localhost.lan group1.localhost.lan group2.localhost.lan”
我的Rails应用程序当前使用collection_select来选择下拉等的查找值.这有两个好处:
例如:edit.html.erb
<div class="field">
<%= f.label :course_type %><br />
<%= f.collection_select :course_type, Lookup.find(:all,:conditions => ["model_name = 'course' and field_name = 'course_type'"]), :id, :lookup_text, include_blank: false,:prompt => "Course Type" %>
</div>
Run Code Online (Sandbox Code Playgroud)
course_controller.rb
private
def get_lookups
@course = Course.find(params[:id])
@course_type = Lookup.find(@course.course_type).lookup_text
Run Code Online (Sandbox Code Playgroud)
show.html.erb
<b>Course type:</b>
<%= @course_type %>
Run Code Online (Sandbox Code Playgroud)
我的应用程序将是多语言的,Rails通过使用区域设置文件来处理这个问题.
问题是:是否可以(并且明智地)从yml文件而不是模型/表中填充查找值,并且可以轻松扩展以处理多种语言吗?如何用基于yml的代码替换上面的代码?
我正在迭代一个哈希,如果哈希键匹配列名(由attr_accessible定义),那么我想更新该列.
def self.load_primer3_output(rawfile_hash)
primer3_output = Primer3Output.new
rawfile_hash.each do |key, value|
if primer3_output.class.accessible_attributes.include?(key)
primer3_output.send(key) = value
end
end
primer3_output.save
end
Run Code Online (Sandbox Code Playgroud)
我在发送时遇到语法错误:
** [out :: 192.241.193.126] /home/assay/apps/assay/releases/20130823054701/app/workers/primer3_query.rb:96: syntax error, unexpected '=', expecting keyword_end
** [out :: 192.241.193.126] (
** [out :: 192.241.193.126] SyntaxError
** [out :: 192.241.193.126] )
** [out :: 192.241.193.126]
** [out :: 192.241.193.126] primer3_output.send(key) = value
** [out :: 192.241.193.126]
** [out :: 192.241.193.126] ^
Run Code Online (Sandbox Code Playgroud)
编辑
顺便说一句,eval是有效的.我宁愿使用发送.
if primer3_output.class.accessible_attributes.include?(key)
#primer3_output.send(key) = value
eval("primer3_output.#{key} = value")
end
Run Code Online (Sandbox Code Playgroud) 我的Rails应用程序中有一个按钮,并希望将其设置为自动对焦,因此用户只需按Enter即可在页面加载时继续.
下面的代码不起作用:该按钮正在工作,但未设置为自动对焦.
<%= link_to new_flashcard_flashcard_test_path(@flashcard_deck.next_flashcard), :class => 'btn btn-primary', :autofocus => true do %>
<span class="glyphicon glyphicon-link"></span>
Next card
<% end %>
Run Code Online (Sandbox Code Playgroud)
生成的HTML
<a autofocus="autofocus" class="btn btn-primary" href="/flashcards/1188/flashcard_tests/new">
<span class="glyphicon glyphicon-link"></span>
Next card
</a>
Run Code Online (Sandbox Code Playgroud) 在我的程序中,我使用状态机,并有许多方便的方法.我目前正在创建一个很长的"?"列表 模型中的方法.
def purchase_ready?
self.current_state == 'purchase_ready'
end
def completed?
self.current_state == 'completed'
end
def region_prepared?
self.current_state == 'region_prepared'
end
Run Code Online (Sandbox Code Playgroud)
什么是元编程方式呢?
我正在使用简单架构,我想有一种方法可以根据预定义列表或其他字段来验证某些字段中的值
针对未更改的预定义列表(例如枚举)进行验证。可以使用复杂的正则表达式来完成此操作,但这感觉不对:
dialogType: {
type: String,
label: "Dialog Type", // 'article', 'sentence','exercise','lesson','word'
optional: false
},
Run Code Online (Sandbox Code Playgroud)
针对用户集合进行验证,可能会应用某些过滤器:
userId: {
type: String,
label: "User ID",
optional: false
}
Run Code Online (Sandbox Code Playgroud)
一个相关问题 以简单模式将allowedValues绑定到集合中的值
升级到Rails 5.2之后,我开始对应用程序中的所有表单都收到一个ActionController :: InvalidAuthenticityToken错误。我通过禁用所有形式的Turbolink来解决此问题,这种方法虽然有效,但不是很好的解决方案。
搜寻互联网,推荐的常见解决方案似乎是禁用protect_from_forgery
skip_before_action :verify_authenticity_token, raise: false
为什么我们需要禁用protect_from_forgery,而这不会产生安全漏洞?
编辑
csrf_meta_tags 在布局中。
我有一个 Rails 模型,它使用str_enum gem。
我正在构建一个生成器,它读取模型并为它们创建页面,因此我希望能够了解str_enum附加到模型的内容。
例如
class User < ApplicationRecord
str_enum :email_frequency, %i[every daily weekly], default: 'every'
end
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够查询User模型并了解str_enum附加到email_frequency,其值为every, daily& weekly。
一旦我能理解str_enum给定字段附加了一个,我就可以将该字段复数化并获取值:
irb(main):004:0> User.email_frequencies
=> ["every", "daily", "weekly"]
Run Code Online (Sandbox Code Playgroud)
这里也有人问过这个问题,建议使用Module#prepend. 我熟悉prepend有条件地将方法插入模型中。
我该如何使用它来解决这个问题?
编辑
这对于验证非常简单,例如:从模型中获取验证
我有一个Rails应用程序,并使用haml和bootstrap.一个我的表单我有两个字段用于输入文本,只显示一个,具体取决于我在控制器中设置的变量.如果有一个文本区域我想调整它,并且:rows属性可以工作,但不是列.
我也尝试使用%div:class =>'span6'来扩展 text_area,但它似乎不起作用.
= form_for [@lesson_layout, @layout_field] do |f|
.field
= f.label :field_name
= f.text_field :field_name
- case @layout_type
- when "Text Field"
.field
= f.label :field_value
= f.text_field :field_value
- when "Text Area"
.field
= f.label :field_value_long
= f.text_area :field_value_long, :rows => 5, :placeholder => 'Enter text.'
.actions
= f.submit
Run Code Online (Sandbox Code Playgroud)
编辑
尝试以下代码,它没有改变框的大小.
.field
= f.label :field_value_long
= f.text_area :field_value_long, :rows => 5, :placeholder => 'Enter text using markdown.', :html => { :style => …Run Code Online (Sandbox Code Playgroud) 许多编程框架将自动将2个字段填充到模型/表/集合中.在Rails中,两个字段是created_at和updated_at.字段的功能是不言自明的.
created_at
首次在数据库中创建记录的时间戳.
的updated_at
存储在表中的任何数据的最新更改的时间戳.
我工作的一个流星计划不与这些字段来开箱即用,所以加createdAt和updatedAt在我的项目.
然后我开始思考:在什么情况下我们需要知道何时首次创建记录,是不是最后一次更新了?