关联模型

时间:2011-12-04 04:58:00

标签: ruby-on-rails forms model controllers

我对SQL查询知之甚少,而且我是Rails上的ruby的新手。 这是我的问题。我有2个表国家和州。一个国家有很多州。 我知道状态表中必须有外键才能连接到Country表。 所以获取一个国家所有州的查询将是

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

我需要能够生成一个用于创建新状态的表单,该表单包含国家/地区的下拉列表。在创建状态时,用户可以选择该州所属的国家/地区。这将帮助我检索一个国家的所有州。我知道我需要分别在Country和State Models中使用has_many和belongs_to。但我无法理解控制器和视图中要进行的修改,以便能够获得所需的形式。

2 个答案:

答案 0 :(得分:0)

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

推荐书籍: Ruby 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 %>

答案 1 :(得分:0)

要在ruby / rails中获取属于某个国家/地区的所有州,您只需在国家/地区模型上调用该关联即可。例如:

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

这是rails协会的工作方式。您不需要自己制作SQL。

您可能还想查看rails在此处为关联提供的所有其他方法:http://apidock.com/rails/ActiveRecord/Associations/ClassMethods