ruby on rails 3.2 - Active Record Association without using id -
i not sure hasn't been answered, not sure search please point me in right direction if asking answered.
i have 2 models:
stock_symbol , weight_symbol
stock_symbol has symbol in matches commodity in weight_symbol model
how can association work when stock_symbol.weight_symbol, weight_symbol back.
i know how in sql, if not standard id this_id lost.
edit:
class stocksymbol < activerecord::base has_many :weight_symbols, primary_key: :symbol def commodity "lc" # example simplify it, there more this. end end class weightsymbol < activerecord::base belongs_to :stock_symbol, foreign_key: :commodity end sample object stock_symbol:
stocksymbol.last <#stocksymbol id: 729, symbol: "lcj13c12500", created_at: "2013-03-15 21:50:49", updated_at: "2013-03-15 21:50:49"> sample object weight_symbol:
weightsymbol.first <#weightsymbol id:1, weight_group_id: 1, symbol: "lc", created_at: "2010-01-05 21:13:28", updated_at: "2010-01-05 21:13:28"> after setting , running stocksymbol.last.weight_symbols.to_sql get:
"select `weight_symbols`.* `weight_symbols` `weight_symbols`.`stock_symbol_id` = 'lcj13c12500'" edit 2:
query should doing (i think):
select * `weight_symbols` `weight_symbols`.`symbol` = 'lc'; query info want.
select * `weight_symbols` join `stock_symbols` b on a.symbol = b.commodity b.symbol = 'lcj13c12500'; new stock symbol object
<#stocksymbol id: 729, symbol: "lcj13c12500", created_at: "2013-03-15 21:50:49", updated_at: "2013-03-15 21:50:49", commodity: "lc">
the rails association methods come options override default keys used in relationship. if it's 1 many association between stocksymbol , weightsymbol, use following:
# stock_symbol.rb has_many :weight_symbols, primary_key: :symbol # weight_symbol.rb belongs_to :stock_symbol, foreign_key: :commodity (not sure if got association right way around, should idea.)
the detailed association reference in association basics guid has thorough listing of options , methods belonging each type of association.
edit: stuff based on updated question.
i'm little confused on how association supposed work -- weightsymbol doesn't seem have commodity attribute. should weightsymbol matched owning stocksymbol when weight_symbol.symbol == stock_symbol.commodity? in case, need set keys accordingly:
# stock_symbol.rb has_many :weight_symbols, primary_key: :commodity # :primary_key field on model value associated models store in foreign_key # weight_symbol.rb belongs_to :stock_symbol, foreign_key: :symbol # :foreign_key column on model should match primary_key field in associated model secondly, can set rails associations using database columns, cannot use method. if absolutely must use method, fake association, example using like:
# stock_symbol.rb def weight_symbol weightsymbol.find_by_symbol(self.commodity) end the downside of horribly inefficient, , there lot of reinventing wheel involved.
if have option make commodity database field, possibly best solution, depending on how it's change. example, if it's derived current state of model, set before_save filter on model whatever processing needs happen , write appropriate value field:
# stock_symbol.rb before_save :set_commodity def set_commodity commodity = "lc" # arrived @ through whatever processing self.commodity = commodity end
Comments
Post a Comment