2011-02-06 2 views
0

Вот совок: я создал тестовое приложение, которое позволяет пользователям создавать идеи, а затем добавлять «пузыри» к этим идеям. В настоящее время пузырь - это просто текст. Я успешно связывал пузыри с идеями. Кроме того, когда пользователь переходит к идее, он перечисляет все пузырьки, прикрепленные к этой идее. Пользователь может даже удалить пузырь для данной идеи.Никаких совпадений маршрутов при попытке редактирования

Моя проблема заключается в редактировании пузырьков. Когда пользователь просматривает идею, он видит содержание идеи, а также любые пузыри для этой идеи. В результате я установил все элементы управления пузырьками (редактирование и удаление) внутри представления идей «показать». Мой код для редактирования пузыря для идеи - <%= link_to 'Edit Bubble', edit_idea_bubble_path %>. Я запустил rake routes, чтобы найти правильный путь для редактирования пузырьков, и это то, что было указано.

Вот моя ошибка: No route matches {:action=>"edit", :controller=>"bubbles"}

В мой контроллер пузыри у меня есть:

def edit 
@idea = Idea.find(params[:idea_id]) 
    @bubble = @idea.bubbles.find(params[:id]) 
end 

def update 
@idea = Idea.find(params[:idea_id]) 
    @bubble = @idea.bubbles.find(params[:id]) 

respond_to do |format| 
    if @bubble.update_attributes(params[:bubble]) 
    format.html { redirect_to(@bubble, 
        :notice => 'Bubble was successfully updated.') } 
    format.xml { head :ok } 
    else 
    format.html { render :action => "Edit" } 
    format.xml { render :xml => @bubble.errors, 
        :status => :unprocessable_entity } 
    end 
end 
end 

Чтобы пойти на шаг дальше, я следующий в моем routes.rb файле

resources :ideas do 
    resources :bubbles 
end 

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

Мне понравилось бы руководство.

Спасибо!

Вот мой show.html.erb файл для идей:

<h2>Bubbles</h2> 
<% @idea.bubbles.each do |bubble| %> 
<p> 
<b>Bubble:</b> 
<%= bubble.description %> 
</p>  
<p> 
<%= link_to 'Edit Bubble', edit_idea_bubble_path (@idea) %> 
</p>  
<tb /> 
<p>  
<%= link_to 'Delete Bubble', [bubble.idea, bubble],    
    :confirm => 'Are you sure you want to delete this bubble?',    
    :method => :delete %> 
</p> 
<% end %> 

<h2>Add a bubble:</h2> 
<%= form_for([@idea, @idea.bubbles.build]) do |f| %> 
    <div class="field">  
    <%= f.label :description %><br />  
    <%= f.text_area :description %> 
    </div> 

    <div class="actions">  
    <%= f.submit %> </div><% end %> 

После edit_idea_bubble_path (@idea), вот edit.html.erb файл для Пузыри:

<%= render 'form' %> 
<%= link_to 'Back to Ideas', ideas_path %> 

И, наконец, мой _form.html.erb файл для Пузыри: это где проблема лежит, я считаю, что

<% form_for([@idea, @idea.bubbles.build]) do |f| %> 
    <%= f.error_messages %> 

<div class="field">  
    <%= f.label :description %><br />  
    <%= f.text_area :description %> 
</div> 

<div class="actions">  
    <%= f.submit %> 
</div> 
<% end %> 

ответ

0

Вы должны предоставить идеи и предметы пузырьковые:

<%= link_to 'Edit Bubble', edit_idea_bubble_path(@idea,@bubble) %> 

Update:

Отредактируйте файл _form.html.erb

<% form_for([@idea, @bubble]) do |f| %> 
+0

Спасибо, что, казалось, работать, но теперь, когда я нажимаю на «Edit Bubble» Я получаю следующее сообщение об ошибке 'Не удалось найти пузырь с ID = 5 [WHERE («пузырьки».idea_id = 5)] '. Использование '@ idea' в качестве объекта в' edit_idea_bubble_path' возвращает идеал_ид (который равен 5) и неправильно ссылается на редактирование пузырька (я не могу связать редактирование, чтобы попасть в bubble_id). Какие-либо предложения? – mmichael

+0

Кроме того, добавление '@ idea, @ bubble' внутри' edit_idea_bubble_path' возвратило еще одну ошибку, поэтому я попытался поместить только '@ idea'. '@ пузырь' тоже не работает. – mmichael

+0

Работали ли все-таки или нет? – khelll

1

Сначала построить маршрут в вашем шоу .html.erb

<%= link_to 'Edit Bubble', edit_idea_bubble_path(@idea, bubble) %> 

Затем, ваш Контроллер должен иметь 2 объектов для обоих @idea и @bubble

когда действие нового

@idea = Idea.find_by_id(:params[:idea_id]) 
@bubble = @idea.bubbles.build 

когда действие редактировать

@idea = Idea.find_by_id(:params[:idea_id]) 
@bubble = @idea.bubbles.find_by_id(:params[:bubble_id]) 

В вашем _form.html.Еврорадио

<% form_for([@idea, @bubble]) do |f| %>