Ассоциированные модели - PullRequest
       10

Ассоциированные модели

0 голосов
/ 04 декабря 2011

У меня мало знаний о SQL-запросах, и я новичок в ruby ​​на Rails. Это мой вопрос. У меня есть 2 таблицы Страна и Штат. В стране много штатов. Я знаю, что в таблице State должен быть внешний ключ, который присоединяется к таблице Country. Таким образом, запрос на получение всех штатов в стране будет

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

Мне нужно иметь возможность создать форму для создания нового государства, в котором есть раскрывающийся список стран. При создании государства Пользователь может выбрать страну, к которой оно принадлежит. Это поможет мне восстановить все штаты в стране. Я знаю, что мне нужно использовать has_many и assign_to в моделях Country и State соответственно. Но я не понимаю, какие изменения необходимо внести в контроллеры и представления, чтобы получить желаемую форму.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2011

Чтобы получить все состояния, принадлежащие стране, в рубинах / рельсах, вы просто назвали бы ассоциацию по модели страны.Например:

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

Так работают рельсовые ассоциации.Вам не нужно создавать SQL самостоятельно.

Вы также можете посмотреть все другие методы, которые rails предоставляет для ассоциаций, здесь: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods

0 голосов
/ 04 декабря 2011

Сначала я бы хотел, чтобы вы прочитали книгу о рубине, затем вы можете перейти к рельсам.

Рекомендуемые книги: Рубин 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 %>
...