在我的Rails应用程序中,有链接到其他外部页面的链接(@post.link
给了我链接)。如果current_user
点击链接,则应该触发控制器操作,即动作viewed
,该操作应该更新我的数据库,更具体地说是一个连接表,其中包含用户查看链接的信息。Rails:通过link_to与外部链接(并更新连接表)呼叫控制器动作
我已经这样做的远:
在我的意见/职位/ index.html的:
# Looping through all the posts
<%= link_to post.title, post.link, target: "_blank", controller: "posts", action: "viewed" %>
在我posts_controller.rb
def viewed
@post = Post.find(params[:id])
@post.views.create(user_id: current_user.id)
#respond_to do |format|
# format.html { redirect_to posts_path }
# format.js
#end
end
我创建了一个名为views
的连接表,其列user_id:integer
和post_id:integer
。
在我的模型/ view.rb
belongs_to :user
belongs_to :post
validates_uniqueness_of :post_id, scope: :user_id
在我的模型/ user.rb
has_many :views, dependent: :destroy
has_many :viewed_posts, through: :views, source: :post
在我的模型/ post.rb
has_many :views, dependent: :destroy
has_many :viewed_user, through: :views, source: :user
在我的routes.rb(我没有任何改变或添加任何新的路由)
devise_for :users, :controllers => {:registrations => "users/registrations", :sessions => "users/sessions"} resources :users, only: [:show] resources :thumbnails, only: [:new] resources :posts, except: [:show] do member do post 'upvote' post 'fupvote' end end authenticated :user do root "posts#index" end
我的问题
:当我点击的链接,我的意见表不更新? (例如,在我的rails控制台View.find_by(user_id: some_user_which_has_clicked_on_links.id)
或View.all
给了我零
什么回报'@ post.views.create(USER_ID:current_user.id)' 。也许你应该使用'create!'或测试返回值? – djothefou
我不确定,但在** link_to **方法中,您将使用第二个参数中的链接,或者使用**控制器**和**动作**键进行哈希处理。但使用两者似乎没有任何意义 – djothefou
将其更改为'@ post.views。!create()'并用新的错误日志更新我们,很可能存在验证失败或者将错误值传递给创建函数 – amrdruid