首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用/ RJS/AJAX更新多个div

使用/ RJS/AJAX更新多个div
EN

Stack Overflow用户
提问于 2010-05-21 10:36:58
回答 3查看 946关注 0票数 0

我正在成功地使用RJS在page.replace.html create.js.rjs上实现AJAX。我正在尝试更新两个位置,而不是一个位置,在观看了Ryan Bates Railscast之后,我非常接近(我认为),但我的/views/likes/create.js.rjs文件的语法有问题。情况是这样的:

位于/views/like/create.js.rjs的代码如下:

代码语言:javascript
复制
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 "counter“在/views/question/show.html.erb页面中显示以下代码:

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

从屏幕演员阵容来看,我认为我的错误与第二行的语法有关。他特别提到,您不能使用本地实例变量,但不确定如何进行更改。有什么想法?

更新:下面是我得到的错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
  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

更新:以下是点赞表单:

代码语言:javascript
复制
    <% 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 %>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-22 13:22:20

尝试这样获取@question,因为您的question_id将出现在params:like散列中

代码语言:javascript
复制
 @question = Question.find params[:like][:question_id]

无论如何,为了仔细检查,像这样打印您的参数,因此在likes_controller的创建操作中添加一条puts语句。

代码语言:javascript
复制
puts params.inspect,params[:like][:question_id]

您在第2行有此错误(nil:NilClass的未定义方法‘line’)

这意味着您的@问题为空,您从未在您的创建操作中声明过此实例。

希望这对你有用。

票数 2
EN

Stack Overflow用户

发布于 2010-05-21 13:37:20

您将得到@question = nil。你应该勾选@ check is nil或@question.likes.count=0,如果是这样,你应该做(10-0),即

代码语言:javascript
复制
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})

代码语言:javascript
复制
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"
票数 0
EN

Stack Overflow用户

发布于 2010-05-21 21:22:58

在控制器中,你需要加载@question变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2879252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档