1

我正在使用印象派 gem 来记录页面浏览量。
假设我有一个 Question 模型和一个 Answer 模型:

问题.rb:

class Question< ActiveRecord::Base
  has_many :answers
  is_impressionable

答案.rb:

class Answer< ActiveRecord::Base
  belongs_to :question
  is_impressionable

在 questions\show.html.erb 中,我有一个答案列表。
当用户将鼠标悬停在答案上时,他们会看到 2 个链接出现:详细信息和转到。
详细信息链接仅打开答案显示页面(提供更多详细信息)并记录显示印象并正常工作:

answers_controller.rb:

 impressionist(@answer)

转到页面是骗人的。当用户点击链接时:

 <%= link_to "Go to", :class => 'answer_link', :remote=>:true,
       :data=>{outval: answer.type_url, cuid: answer.id.to_s, refval: user_question_path(@question.user, @question), txtval: answer.img_url} do %>
            <span class="small_image">
               <%= image_tag(answer.img_url, :alt => 'go to answer', :class =>'img_answer')  %>
             </span>
  <% end %>

,我运行以下 jQuery 片段:

 $('.answer_link').click (->
    url_val=''
    url_val = "http://api.somewebservice.com/api/click?key=abc123"
    url_val += "&out=" + $(this).data('outval')
    url_val += "&loc=" + $(this).data('refval')
    url_val += "&cuid=" + $(this).data('cuid')
    url_val += "&ref=" +  $(this).data('refval')
    url_val += "&txt=" +  $(this).data('txtval')
    window.open url_val
  )

这可以正常工作并运行 Web 服务,然后在新窗口中打开返回的外部链接。
我的问题是试图将此外部点击捕获为印象。
做这个的最好方式是什么?目前,当我单击外部链接时,问题控制器会运行显示操作。

具体问题#1:这个“似乎”是正确的,因为我不想去任何地方(另一个窗口已经打开了外部链接)。使用问题控制器是否正确,显示操作,如果 params[:id]=="Go to" 那么就留在原地。

具体问题#2:如果这是正确的,那么有没有办法向印象派发送一个:action_name(我会发送“go to”而不是现在发送的默认“show”:

具体问题#3:如果不正确,那我该怎么办?也许去 Answers 控制器,去一个自定义的“go_to”?

TIA

4

1 回答 1

0

好的 - 我有一个解决方案(不确定它是否是最好的,但它有效)

  1. 上面的 question.rb 和 answer.rb 保持不变
  2. 为了统计 answer show.html.erb 页面的展示次数,我仍然在 answer_controller 中使用,:

     impressionist(@answer)
    
  3. 为了计算从答案重定向时的展示次数,我在 answer_controller 中创建了一个新的定义:

    def visit_external_site
      @answer= Answer.find(params[:answer_id])
      impressionist(@answer)
      respond_to do |format|
        format.html {render :nothing => true, :status => 200}
      end
    end
    

(我不确定的部分是 format.html (我不想去任何地方,但仍然......)

  1. 我的 routes.rb 有这个:

    match '/:answer_id' => 'answers#visit_external_site', :as => 'visit_external_site'
    
    1. questions\show.html.erb 页面现在有这个:

 <% @question.answers.each do |answer| %>
  <%= link_to url_for(:controller => :answers, :action => :visit_external_site, :answer_id => answer),
                          :class => 'answer_link', :remote => true,
                          :data => {outval:
                                            answer.type_url, cuid: answer.id.to_s, refval:
                                            user_question_path(@question.user, @question), txtval:
                                            answer.img_url} do %>
                <span class="small_image">
                    <%= image_tag(answer.img_url, :alt => 'go to answer', :class => 'img_answer') %>
                </span>
              <% end %>
<% end %>
  1. 我的 jQuery 还是和上面一样

如果有人有更好的方法来做到这一点,请告诉;我不确定这种方式是否“犹太洁食”

于 2013-03-29T15:47:18.517 回答