Rails has_many ассоциация с несколькими ключами - PullRequest
2 голосов
/ 13 марта 2011

Я пытаюсь согнуть рельсы вокруг устаревшей базы данных. Каждая из таблиц имеет столбец «источник данных», представляющий собой 3-х символьный код, из которого поступили данные. Таким образом, чтобы однозначно идентифицировать и связываться с другими таблицами, вам нужно иметь две части информации (например, номер счета и источник данных).

Отношение has_many, которое у меня есть ниже, работает нормально, если я не пытаюсь включить его в запрос.

# Model Association
has_many :transactions,
         :primary_key => :account,
         :foreign_key => :acnt,
         :order => :ddate,
         :conditions => ['datasource = ?', '#{self.datasource}']

# Controller code FAIL when I loop through results in view and call 'account.transactions'
@accounts = Account.includes(:transactions).where(:lname => 'Smith')

# However, this controller code works when I loop through the results in the view and call 'account.transactions'
@accounts = Account.where(:lname => 'Smith')

# View
<% @accounts.each do |a| %>
  <% a.transactions.each do |t| %>
    <%= t.description %>
  <% end %>
<% end %>

Ошибка:

ActionView::Template::Error (undefined method `datasource' for #<Class:0x1025f25c8>):

Как правильно выполнить это в Rails 3?

Ответы [ 3 ]

2 голосов
/ 13 марта 2011

сломался и настроил finder_sql. Похоже, это работает, пока ...

  has_many :transactions,
           :primary_key => :account,
           :foreign_key => :acnt,
           :finder_sql =>
               'SELECT t.* ' +
               'FROM accounts a, transactions t ' +
               'WHERE a.acnt = t.account AND a.datasource = t.datasource ' +
               'ORDER BY t.ddate'
1 голос
/ 13 марта 2011

Попробуйте поставить ваше условие внутри кавычек

has_many :transactions,
         :primary_key => :account,
         :foreign_key => :acnt,
         :order => :ddate,
         :conditions => ['datasource = "#{self.datasource}"']
0 голосов
/ 13 марта 2011

Ваше условие не верно.Попробуйте это.

: условия => ['Transactions.datasource = accounts.datasource']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...