在我的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