1

Prototype/Scriptaculous에서 Ruby on Rails 3을 사용하고 있으며 페이지를 다시로드하지 않고 ActiveRecord 값이 변경된 후에 'div'컨텐츠를 업데이트하려고합니다. 은 "edit.html.erb"에서 페이지를 다시로드하지 않고 ActiveRecord 값을 변경 한 후에 'div'콘텐츠를 업데이트하는 방법은 무엇입니까?

나는이 :

... 

<div id="test_id"> 
    <%= @account.name.to_s %> 
</div> 

<%= link_to_function("Make test") do |page| 
    page.replace_html :test_id, @account.name.to_s 
end %> 

... 

을 클릭하기 전에 난 AJAX를 통해의 '@ account.name'값을 업데이트 "테스트 만들기". 그런 다음 "테스트하기"를 클릭하면 템플릿이 변경되지 않습니다.

이들은 단계 : 나는

  • 나는 'ID로
  • 'DIV ' "테스트 만들기"클릭을 내가 AJAX를 통해'account.name @ '업데이트 페이지
  • 을 보여

    1. = "test_id" '는 변경되지 않습니다!

    내가 뭘 잘못하고 있니?

    P .: 나는 그의 값이 데이터베이스에서 변경된 경우 @account가 페이지에 다시로드되지 않는다고 생각합니다. 그렇다면 무엇을해야합니까?


    은 내가 Railscasts "AJAX with RJS"을 보았다 나는 그의 예를 다음에 (그것은 내 같다),하지만 나를 위해 작동하지 않습니다.

  • 답변

    1

    @ account.name의 값이 "George"인 경우 edit.html.erb를 렌더링 한 경우 새로 고칠 때까지 HTML은 동일하게 유지됩니다 ("George"값). link_to_function에 대한 호출은 페이지로드시 "test_id"div의 내부 html을 'George'로 바꾸는 javascript를 호출하는 html 링크를 렌더링합니다. 해당 HTML을 바꾸지 않는 한, 해당 div의 내부 html을 'George'로 대체합니다.

    그것은 ... 당신이하고 싶은 정확히 모른 채 솔루션을 권장하기 어렵다

    자세한 내용이 업데이트 :

    것은 당신이 값을 변경하는 AJAX 호출을하는 경우를 서버의 계정 이름을 "Fred"로 변경하고 해당 변경 사항을 페이지에 표시하려면 동일한 AJAX 호출 (동일한 컨트롤러 작업)에서 해당 값을 사용하는 페이지 부분을 새로 고쳐야합니다. (account.name은 '조지'입니다 @ 페이지가 렌더링 될 때 경우)

    귀하의 link_to_function는 다음과 같이 HTML을 생성

    <a onclick="try { Element.update("test_id", "George"); ... >Make test</a> 
    

    그것은 아약스 호출하지, 그냥 자바 스크립트를 실행하는 링크입니다. 당신이 그것을 계정 이름의 최신 가치를 발견하고 test_id의 사업부를 새로 아약스 전화를 확인하려면 같은 것을 할 : 이제 AJAX 호출을 수행합니다

    <%# you need prototype included, but it should probably be in application.rhtml %> 
    <%= javascript_include_tag "prototype.js" %> 
    
    <div id="test_id"> 
        <%= @account.name.to_s %> 
    </div> 
    
    <%= link_to_remote "Make test", :url => { :controller => "account", :action => "change_name" } %> 
    

    '테스트하기'링크 'account'컨트롤러의 'change_name'메소드에 추가하십시오.이 방법은 다음과 같습니다.

    def change_name 
        # here you would load the account from the db; I'm cheating 
        @account = Account.new(:name => "Fred") 
    
        render :update do |page| 
        page.replace_html :test_id, :text => @account.name.to_s 
        end 
    end 
    
    +0

    해당 값을 사용하는 페이지 부분을 새로 고치는 방법은 무엇입니까? (내가 올바르게 이해한다면) 나는 당신이 말하는 것을하려고 노력하고 있지만 컨트롤러와 '.js.rjs'파일의 값을 업데이트 할 수는 없습니다. 예를 들어 줄 수 있습니까? 추신 : 다른 정보가 필요한 경우 질문을 업데이트 할 것입니다. – user502052

    +0

    오늘 밤 더 자세한 답변을 드릴 수 있습니다. 그동안, 내가 제안하는 것은 link_to_function 대신 link_to_remote를 사용하는 것이다. link_to_remote 메소드는 서버 (ajax)를 호출합니다. link_to_remote로 호출하는 컨트롤러 동작에서 데이터베이스의 계정을 @account로로드 한 다음 내 대답에 '렌더링'코드를 사용합니다. 희망이 도움이됩니다. –

    관련 문제