У меня возникают проблемы при обновлении представления после того, как отправка формы создает элемент на контроллере, отличном от текущего представления.
У меня есть 2 модели: пользователи и элементы.У пользователей есть несколько элементов.
В представлении «Пользователи» отображаются все его элементы.В представлении у меня есть частичное представление всех элементов в отдельных строках таблицы:
<table class="items">
<%= render @items%>
</table>
В том же представлении у меня есть элемент div, который используется для создания новых элементов, этот элемент содержит элементычастичный (который содержит форму для создания новых элементов):
<div id="new_item_dialog">
<%= render :partial => '/items/new_items' %>
</div>
Этот div 'new_item_dialog' вызывается в диалог через jquery и имеет: remote => true для выполнения асинхронного создания элемента 'create':
$('#open-dialog').click(function(){
$item_dialog.dialog('open');
});
$('.item_submit').click(function(){
$item_dialog.dialog('close');
});
Проблема, с которой я сталкиваюсь, заключается в обновлении пользовательской страницы 'show' после отправки нового элемента.
Простое перенаправление на пользователяshow page из контроллера элемента 'create' не обновляет данные
def create
@user = cur_user
@item = @user.items.build(params[:item])
if @item.save
redirect_to @user
else
render 'new'
end
Я также пытался использовать jQuery для загрузки новых данных:
$('.new_item').bind('ajax:success', function()
{
$.get('/items/new_item', function (html) {
$('.items').html(html);
});
});
Но я получаю ошибкусообщение:
ActionView::MissingTemplate (Missing template items/show with
Любая помощь будет принята с благодарностью!
Примечание. Я также попытался выполнить команду render @user после сохранения элемента в контроллере создания элемента.повторно визуализировать пользовательское представление 'show', но яТа же ошибка «MissingTemplate», что и выше.
Обновлено: Также пробовал:
def create
@user = cur_user
@task = @user.item.build(params[:item])
if @item.save
render :partial => "items/item"
И (заменяя рендер в вышеприведенном контроллере)
render :partial => @item
И
render :partial => 'views/items/item', :collection => @user.items
И
render :partial => 'views/items/item', :locals => { :variable => @item}
И
render :action => 'users/show', :layout => 'users'
Каждый из них вернул ошибку:
ActionView::MissingTemplate (Missing template ..... with {:locale=>[:en, :en], :formats=>[:js, :"*/*"], :handlers=>[:rhtml, :rxml, :builder, :erb, :rjs]} in view paths "test/app/views"):
app/controllers/items_controller.rb:11:in `create'
С Ajax, подобным этому: (хотя никогда не привыкаешь, при рендеринге партиала ничего не получается)
$('.new_item').bind('ajax:success', function()
{
$.ajax({
success: function(html){
$(".items").html(html);
}
});
});