相关疑难解决方法(0)

当猴子修补方法时,你能从新实现调用重写方法吗?

假设我是猴子修补类中的方法,我怎么能从覆盖方法调用重写方法?就像有点像super

例如

class Foo
  def bar()
    "Hello"
  end
end 

class Foo
  def bar()
    super() + " World"
  end
end

>> Foo.new.bar == "Hello World"
Run Code Online (Sandbox Code Playgroud)

ruby monkeypatching

422
推荐指数
2
解决办法
8万
查看次数

Rails嵌套表单与has_many:through,如何编辑连接模型的属性?

使用accepts_nested_attributes_for时如何编辑连接模型的属性?

我有3个模型:由连接器加入的主题和文章

class Topic < ActiveRecord::Base
  has_many :linkers
  has_many :articles, :through => :linkers, :foreign_key => :article_id
  accepts_nested_attributes_for :articles
end
class Article < ActiveRecord::Base
  has_many :linkers
  has_many :topics, :through => :linkers, :foreign_key => :topic_id
end
class Linker < ActiveRecord::Base
  #this is the join model, has extra attributes like "relevance"
  belongs_to :topic
  belongs_to :article
end
Run Code Online (Sandbox Code Playgroud)

所以当我在主题控制器的"新"动作中构建文章时......

@topic.articles.build
Run Code Online (Sandbox Code Playgroud)

...并在topics/new.html.erb中创建嵌套表单...

<% form_for(@topic) do |topic_form| %>
  ...fields...
  <% topic_form.fields_for :articles do |article_form| %>
    ...fields...
Run Code Online (Sandbox Code Playgroud)

... Rails自动创建链接器,这很棒. 现在我的问题是:我的链接器模型还具有我希望能够通过"新主题"表单更改的属性.但是Rails自动创建的链接器除了topic_id和article_id之外,其所有属性都有nil值.如何将其他链接器属性的字段放入"新主题"表单中,这样它们就不会出现?

nested join ruby-on-rails nested-forms

103
推荐指数
2
解决办法
4万
查看次数

Rails:在has_one关联上创建

嗨(巨大的Rails新手在这里),我有以下型号:

class Shop < ActiveRecord::Base
  belongs_to :user
  validates_uniqueness_of :title, :user_id, :message => "is already being used"
end
Run Code Online (Sandbox Code Playgroud)

class User < ActiveRecord::Base
  has_one :shop, :dependent => :destroy
end
Run Code Online (Sandbox Code Playgroud)

当我即将创建一个新商店时,我收到以下错误:

private method `create' called for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

@user = current_user
@shop = @user.shop.create(params[:shop])
Run Code Online (Sandbox Code Playgroud)

我通过阅读指南和教程尝试了不同的变化,但我比以前更困惑,无法让它工作.任何帮助将不胜感激.

ruby-on-rails

93
推荐指数
3
解决办法
5万
查看次数

ActiveRecord Association选择包含记录的计数

class User  
  has_many :tickets 
end
Run Code Online (Sandbox Code Playgroud)

我想创建包含用户计数票据逻辑的关联,并在包含中使用它(用户has_one ticket_count)

Users.includes(:tickets_count)
Run Code Online (Sandbox Code Playgroud)

我试过了

  has_one :tickets_count, :select => "COUNT(*) as tickets_count,tickets.user_id " ,:class_name => 'Ticket', :group => "tickets.user_id", :readonly => true  

User.includes(:tickets_count)

 ArgumentError: Unknown key: group
Run Code Online (Sandbox Code Playgroud)

在这种情况下,include中的关联查询应该使用count with group by ...如何使用rails实现这一点?

更新

  • 我不能改变表结构
  • 我希望AR为包含的用户集合生成1个查询

UPDATE2

我知道SQL,我知道如何用连接选择它,但我的问题现在就像"如何获取数据".我的问题是关于建立我可以在包含中使用的关联.谢谢

Update3 我尝试创建像用户has_one ticket_count创建的关联,但是

  1. 看起来像has_one不支持关联扩展
  2. has_one不支持:组选项
  3. has_one不支持finder_sql

ruby activerecord ruby-on-rails active-relation ruby-on-rails-3

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

嵌套属性无法正确显示表单

我有用户的表格

<%= form_for(@user) do |f| %>
  <%= f.fields_for :businesses do |field| %>
    <div class="field">
      <%= field.label :address %>
      <%= field.text_field :address %>
    </div>   
    <div class="field">
      <%= field.label :city %>
      <%= field.text_field :city %>
    </div>  
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

它不显示我的字段,但是当我更改businesses为时business,它会显示,或者如果我f从 中删除f.fields_for. 但我认为它没有正确保存到数据库中。

我的用户模型

class User < ActiveRecord::Base
  has_many :businesses
  accepts_nested_attributes_for :businesses
en
Run Code Online (Sandbox Code Playgroud)

我的商业模式

class Business < ActiveRecord::Base
  attr_accessible :user_id, :address, :city
  belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

我的商业移民

class CreateBusinesses < ActiveRecord::Migration
  def change …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails nested-attributes ruby-on-rails-3 ruby-on-rails-3.2

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

与验证的多态关联[甚至可能??]

我想知道我是否可以拥有多态关联和存在验证

假设我有一个business模型和一个address模型,并且address是多态的

class Business< ActiveRecord::Base
  has_one :address, as: :addressable
  validates_presence_of :address
end

class Address< ActiveRecord::Base
  belongs_to :addressable, polymorphic: true
end
Run Code Online (Sandbox Code Playgroud)

有可能进行验证validates_presence_of :address吗?使用此设置创建对象时遇到问题.

我们首先要创建一个像这样的业务对象

b = Business.new(name: "Hello23")
b.address = Address.new(street: "House 43 BCD")
b.save!
Run Code Online (Sandbox Code Playgroud)

这不起作用.它给出了undefined method constantize for 0:Fixnum一个错误,因为当它试图将地址保存到db时,它找不到可寻址的id,因为业务尚未保存并且没有为其分配id .

但是从另一方面来说也是不可能的 - 如果没有地址我就无法保存业务.

处理这种情况的最佳方法是什么?

****除此之外,如果我还想在地址方面进行验证,就像这样**

validates_presence_of :addressable
Run Code Online (Sandbox Code Playgroud)

我已经在这2天内一直在努力解决这一切.让我们看看你们有什么想法?**

validation activerecord ruby-on-rails-3

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