2013-10-04 2 views
1

У меня есть has_many: через отношения и сценарий: Пользователь может создать project и добавить в этот проект много words. «Слова» будут храниться только один раз в базе данных, и если они уже существуют в таблице объединений, будет создана ассоциация.Как передать идентификатор другому виду

То, что я до сих пор:

project controller , который добавляет проект в таблицу и перенаправляет на шоу странице, где находится другой simple_form_for в котором все слова будут идти.

def show 
@word = word.new 
end 

Project show View

<%= simple_form_for @word do |f|%> 
    <%=f.input :name%> 
    <%=f.button :submit%> 
<%end%> 

В word controllercreate action Я хотел бы получить идентификатор проекта и заполнить и words таблицу join table.

@project = Project.find(params[:id])

Так как я могу получить project_id и заполнить таблицу соединения и использовать find_or_create_by заполнить words таблицу.

(я знаю, что project_id можно найти в URL, а также я могу напечатать его с помощью @project.id) в представлении

Спасибо

ответ

2

Если у меня вопрос правильно, вы хотите создать отношения has_and_belongs_to_many между проектом и словом. так в вашем Project.rb добавить

has_and_belongs_to_many :words 

и в вашем Word.rb добавить

has_and_belongs_to_many :projects 

Теперь для этих отношений создать новую таблицу projects_words с двумя полями «PROJECT_ID» и «» word_id

В контроллере проекта внутри шоу действия

@words = Word.new 

В с как страница проекта добавить следующее: -

<%= form_for @word,:url => words_path(:project_id => @project.id) do |f|%> 
    <%=f.label :name%> 
    <%=f.text_field :name%> 
    <%=f.button :submit%> 
<%end%> 

Теперь в контроллере слова создать действие сделать так: -

@word = Word.find_or_create_by_name(params[:word][:name]) 
@word.projects = Project.where(:id => params[:project_id]) 
@word.save 
0

Я думаю, что вы можете передать идентификатор проекта в URL, как это,

проекты контроллер:

def show 
    @project = Project.find(params[:id]) 
end 

проекты/show.html.erb

<%= simple_form_for @word, :url => words_path(:project_id=> @project.id), :method => :post do |f| %> 
    <%=f.input :name%> 
    <%=f.button :submit%> 
<%end%> 

Извините, если это не помогло, я не проверял это.

Смежные вопросы