2011-12-04 196 views
0

我对SQL查询知之甚少,而且我对Ruby on Rails感到陌生。 这是我的问题。我有一个2表国家和州。一个国家有很多州。 我知道在State表中必须有加入国家表的外键。 所以查询得到一个国家的所有状态将关联模型

Select * 
From State 
Where 
State. country = Country. country 
And Country.country = 'XYZ' 

我需要能够生成表单创建一个新的状态,其中有一个下拉的国家名单。在创建状态时,用户可以选择国家所属的国家。这将帮助我检索一个国家的所有州。我知道我需要分别在国家和州模型中使用has_many和belongs_to。但我无法理解在控制器和视图中所做的修改能够获得所需的形式。

回答

0

获取所有状态属于国家红宝石/您只需在国家模型上调用关联即可。例如:

@my_country = Country.find params[:country] 
@states = @my_country.states.all 

这是轨道协会的工作方式。你不需要自己创建SQL。

您可能也想看看所有的其他方法轨提供了协会在这里:http://apidock.com/rails/ActiveRecord/Associations/ClassMethods

+1

对不起,我迟到response.Thanks很多 – Varsha

+0

没有probs - 你应该“接受”其中一个答案(如果它帮助你解决问题)。 :)你可以通过点击最佳答案旁边的“打勾”来实现。 –

0

首先,我希望你阅读关于红宝石的书,然后你可以继续使用rails。

推荐书籍: 红宝石http://pragprog.com/book/ruby/programming-ruby Ruby on Rails的http://pragprog.com/book/rails4/agile-web-development-with-rails

这本书会给你一个想法的框架是如何工作的。

继续解决您的问题。你只需要一个所有州和国家的名单。然后尽量把他们放在你的形式的数组:

例 在视图(.html.erb文件)----

<% @countries = w{USA Japan etc..}%> 
<% @state = w{state etc...} %> 
<% form_for ..... |f|%> 
<% f.select :country, @country.collect{|c| [c,c]} %> 
<% f.select :state, @state.collect{|c| [c,c]} %> 
<% end %> 
+0

感谢链接 – Varsha