所以我试图记录链接被点击但无法克服最后一道障碍的次数。
到目前为止,我有以下内容:
配置/ routes.rb中
resources :papers do
resources :articles do
resources :clicks
end
end
click.rb
class Click < ActiveRecord::Base
belongs_to :article, counter_cache: true
validates :ip_address, uniqueness: {scope: :article_id}
end
clicks_controller.rb
class ClicksController&lt; ApplicationController中
def create
@article = Article.find(params[:article_id])
@click = @article.clicks.new(ip_address: request.ip)
@click.save
end
end
article.rb
class Article < ActiveRecord::Base
has_many :clicks
end
schema.rb
create_table "clicks", force: true do |t|
t.integer "article_id"
t.string "ip_address"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "articles", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.text "title"
t.string "url"
t.integer "paper_id"
t.integer "clicks_count"
end
index.html.erb - 文章
<% @articles.each do |article| %>
<div class="articles col-md-4">
<%= link_to article.url, target: '_blank' do %>
<h4><%= article.title %></h4>
<h5><%= article.paper.name.upcase %></h5>
<h6><%= article.created_at.strftime("%d %B %y") %></h6>
<% end %>
首先,这个设置看起来是否正确,有人看到我可能出错的地方吗? 其次,我不知道如何设置我的视图,以便在点击现有链接时注册点击并且计数上升?
由于
答案 0 :(得分:1)
解决了以下问题。
<强> clicks_controller.rb 强>
原件:
def create
@article = Article.find(params[:article_id])
@click = @article.clicks.new(ip_address: request.ip)
@click.save
end
end
修订:
def create
@article = Article.find(params[:article_id])
@click = @article.clicks.new(ip_address: request.ip)
@click.save
redirect_to @article.url
end
end
index.html.erb - 文章
原件:
<%= link_to article.url, target: '_blank' do %>
修订:
<%= link_to paper_article_views_path(article.id, article), method: :post, target: '_blank' do %>
另外,我编辑了原始问题以包含routes.rb
文件。
答案 1 :(得分:0)
在我看来,你应该做两件事:
1)设置&#34;点击&#34;的所有方法进入模型
例如,您可以删除ClicksController
并添加此内容:
class Article
def create_click(ip_address)
self.clicks.create({ :ip_address => ip_address })
end
end
使用此代码的一点注意事项:您的代码中有唯一性验证。实际上,当文章和IP地址已经存在点击时,create
方法将返回false。不要使用create!
,否则会引发异常。
2)添加过滤器:
您只需在ArticlesController
中添加过滤条件即可。在每个show
,它会为查看的click
article
个实例
class ArticlesController
before_filter :create_click, :only => [ :show ]
def create_click
@article.create_click(ip_address)
end
end