2010-05-21 58 views
0

我成功使用RJS在page.replace.html create.js.rjs上實現AJAX。我試圖更新兩個位置而不是一個,並在觀看後Ryan Bates Railscast我非常接近(我認爲),但在我的/views/likes/create.js.rjs文件的語法中存在問題。這裏的情況是:更新多個div w/RJS/AJAX

位於/views/likes/create.js.rjs是下面的代碼:

page.replace_html "votes_#{ @site.id }", :partial => @like 
page.replace_html "counter", 10 - (@question.likes.count :conditions => {:user_id => current_user.id}) 
page[@like].visual_effect :highlight 

我的問題就出在第二行。 DIV的「計數器」顯示了/views/question/show.html.erb頁面下面的代碼:

<div id="counter"> 
     You have <%= 10 - (@question.likes.count :conditions => {:user_id => current_user.id}) %> votes remaining for this question 
    </div> 

從看屏幕投我相信我的錯誤必須做瓦特/秒的語法線。具體而言,他提到你不能使用本地實例變量,但不知道如何進行更改。思考?

更新:這裏是我得到的錯誤:

ActionView::TemplateError (undefined method `likes' for nil:NilClass) on line #2 of app/views/likes/create.js.rjs: 
1: page.replace_html "votes_#{ @site.id }", :partial => @like 
2: page.replace_html "counter", 10 - (@question.likes.count :conditions => {:user_id => current_user.id}) 
3: page[@like].visual_effect :highlight 

    app/views/likes/create.js.rjs:2:in `_run_rjs_app47views47likes47create46js46rjs' 
    app/views/likes/create.js.rjs:1:in `_run_rjs_app47views47likes47create46js46rjs' 
    app/controllers/likes_controller.rb:8:in `create' 

Rendered rescues/_trace (103.8ms) 
Rendered rescues/_request_and_response (0.4ms) 
Rendering rescues/layout (internal_server_error) 

UPDATE:

類LikesController < ApplicationController的

def create 
    @user = current_user 
    @site = Site.find(params[:site_id]) 
    @like = @site.likes.create!(params[:like].merge(:user_id => @user.id)) 

    respond_to do |format| 
    format.html { redirect_to @site} 
    format.js 
    end 
    end 
end 

更新:這裏是喜歡形成:

<% remote_form_for [site, Like.new] do |f| %> 
    <%= f.hidden_field :site_name, :value => "#{site.name}" %> 
    <%= f.hidden_field :question_id, :value => @question.id %> 
    <%= f.hidden_field :ip_address, :value => "#{request.remote_ip}" %> 
    <%= f.hidden_field :like, :value => "1" %> 
    <%= submit_tag "^" , :class => 'voteup' %> 
<% end %> 
+0

請粘貼您在此ajax請求上運行的控制器操作中的代碼。 – klew 2010-05-21 09:25:29

+0

剛剛添加了喜歡的控制器創建動作...是你在說什麼? – bgadoci 2010-05-21 11:32:59

回答

2

嘗試讓@question這樣的,因爲你的question_id將存在裏面PARAMS [:像]哈希

@question = Question.find params[:like][:question_id] 

反正雙重檢查打印PARAMS這樣使加放語句創建likes_controller的作用。

puts params.inspect,params[:like][:question_id] 

你有這樣的錯誤(未定義的方法`喜歡的零:NilClass)上線#2

這意味着你的@question是零,你從未宣佈過在你創建操作此實例。

希望這對你有用。

+0

好人......完美的工作 – bgadoci 2010-05-23 03:16:37

+0

很高興聽到:)。 – Vamsi 2010-05-23 05:04:45

0

你得到@question = nil。您應該檢查@question爲零或@ question.likes.count = 0,如果是的話,你應該做的(10-0),即

if //your condition here 
    page.replace_html "counter", "You have 10 votes remaining for this question" 
else 
    page.replace_html "counter", 10 - (@question.likes.count :conditions => {:user_id => current_user.id}) 

OR

remaining_votes= (@question && [email protected] && @question.likes.count :conditions => {:user_id => current_user.id} !=0)? @question.likes.count :conditions => {:user_id => current_user.id} : 0 
page.replace_html "counter", "You have #{10-remaining_votes } votes remaining for this question" 
0

在控制器需要加載@question變量。

+0

我只需要添加:'@question = Question.find(params [:question_id])'?或者我還需要在某種程度上影響'@like = @ site.likes.create!(params [:like] .merge(:user_id => @ user.id))? – bgadoci 2010-05-21 17:24:11

+0

是的,它應該像'@question = Question.find(params [:question_id])',但它取決於你當前的'params'哈希,這取決於你的url。如果你的url看起來像這樣:'myhost。com/questions/45'然後'question_id'在'params [:id]'中。你的'@ like'代碼應該可以工作,但這也取決於。如果你的表格是正確創建的,那麼它應該就足夠了。 – klew 2010-05-21 18:00:49

+0

我發佈了我的表單,因爲我無法讓您的解決方案正常工作。看到編輯的問題。 – bgadoci 2010-05-21 22:15:59