我知道Rails不支持嵌套的has_many:通过关系,虽然早在Rails 2之前就有关于补丁的谈话和开放票.
我确实遇到了一个非常光滑的插件,但是主分支机构不能与Rails 3一起工作,我对于在应用程序中使用它来完成任务关键任务犹豫不决,因此最近缺乏活跃的开发.那么 - 处理这些关系的最佳方式是什么?
class Author < ActiveRecord::Base
has_many :contracts
has_many :products, :through => :contracts
class Product < ActiveRecord::Base
has_many :contracts
has_many :orders
has_many :authors, :through => :contracts
class Contracts < ActiveRecord::Base
belongs_to :author
belongs_to :product
Run Code Online (Sandbox Code Playgroud)
所以,通过将其添加到Author模型,能够获得订单将会很棒.
has_many :orders, :through => :products
Run Code Online (Sandbox Code Playgroud)
但是,唉,你不能 - 至少没有插件.所以,我的问题是,当唯一关联是在连接模型,合同之间时,访问所有作者订单的最佳方法是什么?
我正在使用twitter gem并且在一个方法中有一个错误 - Twitter需要身份验证,并且此方法已设置为用于身份验证的fals.似乎有人最近使用此提交修复了它:
https://github.com/jnunemaker/twitter/commit/4483ad062c5dd65b4adb13fb8da5efdaf550f35a#
但是,当我使用该方法时 - 我仍然会收到错误:
Twitter::Unauthorized: GET https://api.twitter.com/1/statuses/retweets/{id}.json: 401: Could not authenticate you.
Run Code Online (Sandbox Code Playgroud)
我尝试更新宝石.
gem update twitter
Updating installed gems
Nothing to update
Run Code Online (Sandbox Code Playgroud)
我也试过,更新捆绑,但没有运气.所以,我不确定如何将新代码添加到我的包中,以便它使用该方法进行身份验证?
我正在使用以下验证来计算rails中的单词(我从Rails文档中获得了示例),但它并不真实:
validates :body, :length => {
:minimum => 50,
:maximum => 300,
:tokenizer => lambda { |str| str.scan(/\w+/) },
:too_short => "must have at least %{count} words",
:too_long => "must have at most %{count} words"
}
Run Code Online (Sandbox Code Playgroud)
一个用户试图发布一个291个单词的东西(这是Word给出的计数)并且它被拒绝的时间太长了.我不确切地知道正在使用的表达式有什么问题,或者可能是一个很好的表达式来确保准确的字数.
我的模型中有以下内容:
PRODUCTSTATES = %w[published coming_soon in_development cancelled]
Run Code Online (Sandbox Code Playgroud)
我正在使用它来填充表单中的下拉列表,我正在尝试humanize
使列表看起来很漂亮,但似乎无法得到它.
<%= f.select :status, Product::PRODUCTSTATES %>
Run Code Online (Sandbox Code Playgroud)
Product::PRODUCTSTATES.humanize
显然不起作用,也没有事先转换为字符串.
我正在构建一个用户可以购买跟踪号码的应用程序.我有一个订单模型和一个订单交易模型.如果订单事务从网关成功返回,我使用after_save回调来触发创建跟踪号并将它们插入数据库的方法.有时用户只订购一个,但如果他们订购的不止一个,我似乎无法创建和插入多个记录.
这就是我正在使用的东西 - 我从来没有像这样使用过循环,所以我不确定我做错了什么.
def create_trackables
if self.success == true
@order = Order.find(order_id)
@start = 0
while @start < @order.total_tokens
@trackable_token = Tracker.create_trackable_token
@start += 1
@trackable ||= Tracker.new(
:user_id => @current_user,
:token => @trackable_token,
:order_id => order_id
)
@trackable.save
end
end
end
Run Code Online (Sandbox Code Playgroud) 我正在使用以下jquery和jqueryui来获取第一个datepicker的值并使其成为第二个的最小值 - 但我认为我需要将其链接到blur事件以确保作为#project_start
更改,变量更改.我只是想不通怎么做.当我将.blur添加到第一个代码段的末尾时,它全部停止工作.
$( "#project_start" ).datepicker({
dateFormat: 'yy-mm-dd',
appendText: '(yyyy-mm-dd)',
showAnim: 'fade'
})
var start = $("#project_start").val();
$( "#project_end" ).datepicker({
dateFormat: 'yy-mm-dd',
minDate: start,
appendText: '(yyyy-mm-dd)',
showAnim: 'fade'
});
Run Code Online (Sandbox Code Playgroud)
如何添加模糊事件,或者我应该使用其他一些事件监听器?
我有一个哈希发布到我的Rails应用程序,看起来像这样:
{"signed_request"=>"...",
"buyer"=>"1064897036",
"receiver"=>"1064897036",
"order_id"=>"224539980951036",
"method"=>"payments_get_items",
"test_mode"=>"1",
"order_info"=>{"description"=>"None",
"image_url"=>"",
"price"=>"1",
"product_url"=>"",
"title"=>"Premium Membership"}}
Run Code Online (Sandbox Code Playgroud)
我正在借用一些代码来解析它并发回相应的响应.首先,我解析已签名的请求,该工作正常,然后我构建订单信息以将其发送回服务器.这就是麻烦开始的地方,似乎:
...
elsif method == 'payments_get_items'
order_info = params[:order_info]
item = JSON.parse(order_info)
item['price'] = item['price'].to_i
# for url fields, if not prefixed by http://, prefix them
url_key = [ 'product_url', 'image_url' ]
url_key.each do |key|
if item[key][0..6] != 'http://'
item[key] = "http://#{item[key]}"
end
end
# if payload['test_mode']
if request.params['test_mode']
update_keys = ['title', 'description']
update_keys.each do |key|
item[key] = '[Test Mode] ' + item[key]
end
end
data['content'] = …
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何从数组中随机选取?
确保不选择不存在的项目的适当方法是什么?
icons = %w[asterisk star arrow]
random = rand(icons.length)
Run Code Online (Sandbox Code Playgroud)
要么
icons = %w[asterisk star arrow]
random = rand(icons.length -1)
Run Code Online (Sandbox Code Playgroud) 我的页面上有很多.photo
类的元素.
我这样选择它们:
$('#photos-container .photo').hover ...
Run Code Online (Sandbox Code Playgroud)
有没有办法过滤掉那些没有触发悬停事件的元素?
我正在关注Rails演员来实现订阅计费.它在这里:
http://railscasts.com/episodes/288-billing-with-stripe
我的代码几乎完全相同,但我将一些额外的字段传递给Stripe.麻烦的是,javascript中的错误消息总是在提交按钮被点击时显示错误消息...即使成功收费.我不确定Strip是否返回了触发错误的东西,或者是否存在JS问题.
jQuery ->
Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
subscription.setupForm()
subscription =
setupForm: ->
$('#new_membership').submit ->
$('input[type=submit]').attr('disabled', true)
if $('#card_number').length
subscription.processCard()
false
else
true
processCard: ->
card =
number: $('#card_number').val()
cvc: $('#card_code').val()
expMonth: $('#card_month').val()
expYear: $('#card_year').val()
Stripe.createToken(card, subscription.handleStripeResponse)
handleStripeResponse: (status, response) ->
if status == 200
$('#membership_stripe_card_token').val(response.id)
$('#new_membership')[0].submit()
else
$('#stripe_error').text(response.error.message)
$('input[type=submit]').attr('disabled', false)
Run Code Online (Sandbox Code Playgroud)
这是用于错误处理的示例条带.他们首先翻转过程并测试错误:
function stripeResponseHandler(status, response) {
if (response.error) {
...
//show the errors on the form
$(".payment-errors").html(response.error.message);
} else {
var form$ = $("#payment-form");
// token contains id, last4, and card type …
Run Code Online (Sandbox Code Playgroud) 我有一个标签模型,我希望它是多态的,但我不希望“视频”标签有五个记录,例如,我想创建一次标签并能够在各种模型上使用它。我已经在这里准备了一些有关这样做的问题,但我不太明白如何使其发挥作用。
所以我有:
class Tag < ActiveRecord::Base
belongs_to :tagable, :polymorphic => true
end
Run Code Online (Sandbox Code Playgroud)
和
class Post < ActiveRecord::Base
has_many :tags, :through => :tag_assignments
end
Run Code Online (Sandbox Code Playgroud)
和
class TagAssignment < ActiveRecord::Base
has_many :tags, :as => :taggable
end
Run Code Online (Sandbox Code Playgroud)
在我看来,这应该可行,但是......阅读这里的所有问题,我知道我需要一个:source =>
选项将它们连接在一起,但我只是没有完全遵循如何做到这一点。有人可以帮忙吗?
也许我在这里遗漏了一些非常简单的东西,我不知道 - 我以前从未部署过rails应用程序.我正要.我正在使用Devise进行用户身份验证,并且有几个需要身份验证的操作.该应用程序未设置,因此任何人都可以注册,注册仅限于将管理该应用程序的一组用户.
但是,我不知道...当应用程序切换到生产数据库时,如何将自己设置为第一个用户?用户模型将为空,我甚至无法访问允许我设置新用户的控制器,因为这些控制器需要身份验证.
remote: Counting objects: 610, done.
remote: Compressing objects: 100% (352/352), done.
remote: Total 610 (delta 296), reused 434 (delta 210)
Receiving objects: 100% (610/610), 5.50 MiB | 2.19 MiB/s, done.
Resolving deltas: 100% (296/296), done.
error: Untracked working tree file '.DS_Store' would be overwritten by merge.
Run Code Online (Sandbox Code Playgroud)
那么,我留下了一个空的存储库.我刚刚将.DS_Store添加到我的.gitignore文件中,但似乎我甚至无法将干净的副本拉到我的本地机器上.
ruby ×3
jquery ×2
activerecord ×1
coffeescript ×1
gem ×1
git ×1
github ×1
javascript ×1
jquery-ui ×1
json ×1
models ×1
rails-models ×1
regex ×1
rubygems ×1