0

RJS を使用して page.replace.html create.js.rjs に AJAX を実装しています。私は 1 つではなく 2 つの場所を更新しようとしています。Ryan Bates Railscastを見た後、非常に近い (と思います) が、/views/likes/create.js.rjs ファイルの構文に問題があります。状況は次のとおりです。

/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

私の問題は2行目にあります。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>

スクリーンキャストを見て、私のエラーは2行目の構文に関係していると思います。具体的には、ローカル インスタンス変数は使用できないが、変更方法がわからない、と述べています。考え?

更新:ここに私が得ているエラーがあります:

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)

アップデート:

クラス 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 %>
4

3 に答える 3

2

question_id は params[:like] ハッシュ内に存在するため、このような @question を取得してみてください

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

とにかく、二重チェックのために、このようにパラメータを出力するので、likes_controller の create アクションに puts ステートメントを追加します。

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

2 行目にこのエラー (nil:NilClass の未定義メソッド「likes」) があります。

これは、@question が nil であることを意味します。create アクションでこのインスタンスを宣言したことはありません。

これがうまくいくことを願っています。

于 2010-05-22T05:22:19.943 に答える
0

@questionコントローラーでは、変数をロードする必要があります。

于 2010-05-21T13:22:58.443 に答える
0

あなたは@question = nilを取得しています。@question が nil または @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})

また

remaining_votes= (@question && !@question.likes.blank && @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"
于 2010-05-21T05:37:20.387 に答える