我一直在努力与has_many/throughFactory Girl 建立关系.
我有以下型号:
class Job < ActiveRecord::Base
has_many :job_details, :dependent => :destroy
has_many :details, :through => :job_details
end
class Detail < ActiveRecord::Base
has_many :job_details, :dependent => :destroy
has_many :jobs, :through => :job_details
end
class JobDetail < ActiveRecord::Base
attr_accessible :job_id, :detail_id
belongs_to :job
belongs_to :detail
end
Run Code Online (Sandbox Code Playgroud)
我的工厂:
factory :job do
association :tenant
title { Faker::Company.catch_phrase }
company { Faker::Company.name }
company_url { Faker::Internet.domain_name }
purchaser_email { Faker::Internet.email }
description { Faker::Lorem.paragraphs(3) }
how_to_apply { Faker::Lorem.sentence }
location "New …Run Code Online (Sandbox Code Playgroud) 我在一个表单上有一个字段,我试图访问相应的模型,但它不是模型数据库表的一部分.处理这个问题的最佳方法是什么?这是不好的做法吗?
我正在考虑在Rails4.2和Postgres4.1中使用新的jsonb功能.
我正在寻找创建一个代表用户配置文件(即技能集等)的模型,并将整个事物存储在单个jsonb数据集中.
所以表格会有:
id int
profile jsonb
timestamps
Run Code Online (Sandbox Code Playgroud)
我以为我基本上可以将所有配置文件数据存储在jsonb结构中,如下所示(这只是一个示例/概念):
{
"basics": {
"name": "John Doe",
"label": "Programmer",
"picture": "",
"email": "john@gmail.com",
"phone": "(912) 555-4321",
"website": "http://johndoe.com",
"summary": "A summary of John Doe...",
"location": {
"address": "2712 Broadway St",
"postalCode": "CA 94115",
"city": "San Francisco",
"countryCode": "US",
"region": "California"
},
"profiles": [{
"network": "Twitter",
"username": "john",
"url": "http://twitter.com/john"
}]
},
"skills": [{
"name": "Web Development",
"level": "Master",
"keywords": [
"HTML",
"CSS",
"Javascript"
]
}],
"languages": [{
"language": "English",
"fluency": "Native speaker" …Run Code Online (Sandbox Code Playgroud) 我发现使用诸如foo.bar.uk.com之类的域会导致在提交任何表单时Rails抛出ActionController::InvalidAuthenticityToken.
foo.bar.co.uk和foo.bar.co.com工作,但由于某种原因foo.bar.uk.com抛出错误.
某处是否有可接受的域/ TLD列表?
它还会在foo.bar.eu.com上抛出错误
更新:
删除:
:domain => :all
Run Code Online (Sandbox Code Playgroud)
从:
MyApp::Application.config.session_store :cookie_store, key: '_my_session', :domain => :all
Run Code Online (Sandbox Code Playgroud)
允许表单提交,但它不修复登录(即其他cookie相关的功能).
尝试在本地预编译资产时,我得到以下内容
RAILS_ENV=production bundle exec rake assets:precompile
rake aborted!
Sprockets::NotImplementedError: Custom asset_path helper is not implemented
Extend your environment context with a custom method.
environment.context_class.class_eval do
def asset_path(path, options = {})
end
end
/Users/cman/.rvm/gems/ruby-2.2.2@jbd-ruby2.2.2/gems/sprockets-3.6.0/lib/sprockets/context.rb:198:in `asset_path'
/Users/cman/.rvm/gems/ruby-2.2.2@jbd-ruby2.2.2/gems/sprockets-3.6.0/lib/sprockets/context.rb:218:in `font_path'
/Users/cman/.rvm/gems/ruby-2.2.2@jbd-ruby2.2.2/gems/font-awesome-rails-4.6.1.0/app/assets/stylesheets/font-awesome.css.erb:15:in `_evaluate_template'
Run Code Online (Sandbox Code Playgroud)
我不能为我的生活弄清楚为什么会这样 - 任何有关如何解决的建议将不胜感激!
更新
只有在我添加具有以下内容的初始化程序时,我才能进行预编译:
Rails.application.assets.context_class.class_eval do
def asset_path(path, options = {})
return ''
end
end
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,当我推送到我的暂存环境时,Bootstrap中的glyphicons有一个空路径,因此不会渲染:
font-face{font-family:'Glyphicons Halflings';src:url("");src:url("") format("embedded-opentype"),url("") format("woff"),url("") format("truetype"),url("")
Run Code Online (Sandbox Code Playgroud)
更新2
如果我将初始化程序修改为如下所示,我在预编译bootstrap资产中获取了一个用于glypicons的路径,但它不是预编译的Glyphicon文件,而是非编译资产路径:
Rails.application.assets.context_class.class_eval do
def asset_path(path, options = {})
#return ''
"/assets/#{path}"
end
end
@font-face{font-family:'Glyphicons Halflings';src:url("/assets/bootstrap/glyphicons-halflings-regular.eot");src:url("/assets/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("/assets/bootstrap/glyphicons-halflings-regular.woff") format("woff"),url("/assets/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"),url("/assets/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular")
Run Code Online (Sandbox Code Playgroud)
这是我的gemfile.lock,因为它与assets/sprockets …
我正在HEROKU托管应用程序上设置MX记录并遇到问题.
我有两个CNAME的设置:
@ myapp.herokuapp.com
www myapp.herokuapp.com
Run Code Online (Sandbox Code Playgroud)
网站在上面的设置工作正常.我现在正尝试通过添加Google Apps MX记录来添加电子邮件支持.
@ ASPMX.L.GOOGLE.COM. MX 10 1800
Run Code Online (Sandbox Code Playgroud)
- 以及其他四个MX后退 -
Google Apps称它无法读取MX记录.这是因为它们与@CNAME记录冲突吗?如果是这样,我应该删除它并使用"Naked Domain"方法(改为设置三个A记录).Heroku让人觉得这种方法对于"@"非WWW的CNAME来说非常气馁.
谢谢您的帮助!
我的数据库中有一个名为metadata_types的查找表,其中列出了我的应用程序使用的所有各种类型的元数据.
元数据是Metadatum的复数; 我应该调用表metadatum_types吗?换句话说,在这种情况下,多数应该是两个单词,还是只有第二个?那么相应的模型是否也应该是metadatum_type.rb(Class MetadatumType)?
我有一个 ActionMailer 设置来从 S3 发送带有附件的电子邮件。我这样做:
def job_apply(current_tenant, applicant)
@current_tenant = current_tenant
@applicant = applicant
file = open(applicant.resume.url).read
attachments[applicant.resume] = file
email_with_name = "#{@current_tenant.name} <#{@current_tenant.help_email}>"
mail(from: email_with_name, to: applicant.job.apply_email, subject: "New Job Application")
end
Run Code Online (Sandbox Code Playgroud)
申请人.resume.url 返回一个正确的 URL,我可以在浏览器中打开它并检索文件,但是我收到以下错误:
Message undefined method `ascii_only?' for #<ApplicantResumeUploader:0x007fe6bc5c28a8>
File /Users/cmalpeli/.rvm/gems/ruby-1.9.3-p194@job_board/gems/mail-2.4.4/lib/mail/encodings.rb
Line 103
Run Code Online (Sandbox Code Playgroud)
这是 encodings.rb 中的代码:
98 def Encodings.decode_encode(str, output_type)
99 case
100 when output_type == :decode
101 Encodings.value_decode(str)
102 else
103 if str.ascii_only?
104 str
105 else
106 Encodings.b_value_encode(str, find_encoding(str))
107 end
108 end
Run Code Online (Sandbox Code Playgroud)
我对从这里去哪里有点不知所措......
任何帮助,将不胜感激...
我在 Capybara 和 Selenium 方面遇到了一个有趣的问题。我有一些 Capybara 请求规范,要求在填写表单时启用 javascript。其中一种形式是使用 Redactor 富文本编辑器的文本区域。
<div class="control-group">
<%= f.label :description, "Description", class: "control-label" %>
<div class="controls">
<%= f.text_area :description, rows: 10, class: "redactor"%>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当测试运行并且 Selenium 触发时(在 FF 和 Chrome 驱动程序中),Selenium 在执行以下命令时失败:
`fill_in "Description", with: "some description"`
Run Code Online (Sandbox Code Playgroud)
它返回的错误是:
Selenium::WebDriver::Error::InvalidElementStateError:
Element is not currently interactable and may not be manipulated
Run Code Online (Sandbox Code Playgroud)
看来 Selenium 无法再识别富文本编辑器/文本区域了。如果我删除class="redactor"触发 Redactor JS 渲染描述文本区域的内容,它就可以正常工作。
所以我的问题是,1.有没有解决方法来填写它?2. 或者,我可以以某种方式禁用 redactor js 来进行此测试吗?
使用Rails 4,我遇到了一个问题,即Bootstrap中的glyphicons没有被正确预编译.生成以下内容:
started GET "/assets/glyphicons-halflings-white-ed38e147e3f6e976c0a7ad59e4d628f3.png" for 127.0.0.1 at 2014-01-13 18:41:25 -0500
Started GET "/assets/glyphicons-halflings-white-ed38e147e3f6e976c0a7ad59e4d628f3.png" for 127.0.0.1 at 2014-01-13 18:41:25 -0500
Processing by ApplicationController#routing_error as PNG
Processing by ApplicationController#routing_error as PNG
Parameters: {"path"=>"assets/glyphicons-halflings-white-ed38e147e3f6e976c0a7ad59e4d628f3"}
Parameters: {"path"=>"assets/glyphicons-halflings-white-ed38e147e3f6e976c0a7ad59e4d628f3"}
Rendered public/404.html (0.3ms)
Rendered public/404.html (0.3ms)
Completed 404 Not Found in 17ms (Views: 3.4ms | ActiveRecord: 8.0ms)
Completed 404 Not Found in 17ms (Views: 3.4ms | ActiveRecord: 8.0ms)
Run Code Online (Sandbox Code Playgroud)
它在开发中工作正常.如果我config.assets.compile = true在production.rb中设置它似乎工作正常 - 但我理解基于这个SO问题是非常糟糕的:
资产:precompile生成的文件与stylesheet_link_tag(缺少摘要)在最小的rails 4中生成的url不匹配现场
在Rails 3.2中,这对我来说不是问题.
任何帮助将不胜感激!
heroku ×2
actionmailer ×1
assets ×1
bdd ×1
capybara ×1
cname ×1
factory-bot ×1
json ×1
jsonb ×1
models ×1
postgresql ×1
precompile ×1
redactor ×1
rspec ×1
selenium ×1
sprockets ×1