2011-03-21 2 views
2

양식 제출이 현재보기와 다른 컨트롤러에 항목을 만든 후보기를 새로 고치는 데 문제가 있습니다.레일 - 다른 컨트롤러에서 제출 한 후보기 새로 고침

두 개의 모델, 사용자 및 항목이 있습니다. 사용자는 여러 항목을 가지고 있습니다.

사용자 '쇼'보기는 모든 항목을 나열합니다. 보기에서 I 별도 테이블 행에있는 모든 항목을 렌더링하기위한 부분을 가지고 I는 새로운 아이템을 생성하는 데 사용되는 하단 DIV가 동일한 관점에서

<table class="items"> 
      <%= render @items%> 
</table> 

이 DIV는 파셜 항목 (포함 이는) 새로운 항목을 만들기위한 양식을 포함

이 'new_item_dialog'사업부는 JQuery와 통해 대화 상자에 팝업, 그리고 가지고있다
<div id="new_item_dialog"> 
    <%= render :partial => '/items/new_items' %> 
</div> 

:

: 원격 => 항목을 수행하는 경우는 true 비동기 '생성'
$('#open-dialog').click(function(){ 
    $item_dialog.dialog('open'); 
}); 

$('.item_submit').click(function(){ 
    $item_dialog.dialog('close');  
}); 

새 항목이 제출 된 후 사용자의 '표시'페이지가 새로 고쳐집니다.

데이터가

def create 
    @user = cur_user 
    @item = @user.items.build(params[:item]) 
    if @item.save 
     redirect_to @user 
    else 
     render 'new' 
    end 

나는 또한 새로운 데이터를로드 jQuery를 사용하려고했습니다 새로 고침 나던 항목의 '생성'컨트롤러에서 사용자의 쇼 페이지 redirect_to 간단한 :

$('.new_item').bind('ajax:success', function() 
{ 
    $.get('/items/new_item', function (html) { 
       $('.items').html(html); 
      }); 
}); 

ActionView::MissingTemplate (Missing template items/show with 

이 어떤 도움이 크게 AP 것 :

는하지만 오류 메시지가 preciated!

참고 : 사용자의 '표시'보기를 다시 렌더링하기 위해 항목의 '만들기'컨트롤러에 항목이 저장된 후에도 '렌더링 @ 사용자'를 시도했지만 동일한 '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 

그리고

,536을 ((가) 상기 제어기에서 렌더링 교체)
가 또한 시도 이 같은 아약스와 함께

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' 

:

render :partial => 'views/items/item', :locals => { :variable => @item} 

그리고 이들의

render :action => 'users/show', :layout => 'users' 

모든 사람은 오류를 반환 (나던 이제까지하지만 익숙해, 모든 부분의 렌더링 실패)

$('.new_item').bind('ajax:success', function() 
    { 
     $.ajax({ 
       success: function(html){ 
       $(".items").html(html); 
       } 
     }); 
    }); 
+0

렌더링은 실제로 리디렉션이 아닙니다. 어떻게 redirect_to user_path (@user) 항목을 만든 후? – corroded

답변

1

리디렉션 redirect_to의 user_path (@user)

또는

당신이 항목을 만들 때 일부 항목을 반환 할 수를 사용하여 (렌더링하지 않음).

  1. ,
  2. 항목이 컨트롤러에 생성됩니다 아약스 통해 양식을 제출하여 항목을 만들 렌더링 : 부분 => "/ 경로 /에/항목을"
  3. 당신이 나타납니다 무슨 일이있다 HTML, 현재 부분

    $ 아약스 ({... ... 성공을 대체 할 성공 기능을 넣어 당신의 jQuery의 아약스 호출 있도록 : $ ({) "항목을.") 기능 (HTML을 .html (html); // 전체 타를 렌더링하려면 replaceWith (html)를 사용할 수도 있습니다. 다시 표기하지만 표를 부분적으로 넣으십시오. });

+0

새 작업을 저장 한 후 리디렉션을 시도했지만 그 작업도 진행되지 않았습니다. 목록에 새로 생성 된 항목이 없습니다. (나는 코드 샘플을 편집했다. 나는 다른 접근법을 시도 할 때 우연히 "렌더링"을 유지했다.) 두 번째 옵션 인 jQuery ajax를 어떻게 사용합니까? 부분적으로 _item.html.erb라고하면, 할 수 없습니다 : $ .get ('/ items/item') ... 아니면 MissingTemplate 오류가 발생합니다. – user426898

+0

아니 아약스 얻을하지만 귀하의 성공 함수에서 내가 위에서 보여준 것처럼 html 매개 변수를 추가하십시오. 그런 다음 jquery replace를 사용하여 부분을 바꿉니다. 컨트롤러에는 render : partial => "items"절이 있어야합니다. 다시 아이템 목록을 렌더링 할 곳은 – corroded

+0

입니다. 컨트롤러에 아이템 목록에 대한 html을 다시 알려주고, 현재 아이템 목록을 대체 할 수 있습니다. – corroded

관련 문제