В моем приложении rails есть сообщения, которые имеют ссылки на другие внешние страницы (@post.link
дает мне ссылку). Если нажимает на ссылку current_user
, необходимо активировать действие контроллера, а именно действие viewed
, которое должно обновить мою базу данных, а точнее таблицу соединений с информацией, которую пользователь просмотрел ссылку.Рельсы: действие контроллера вызова со ссылкой на внешнюю ссылку (и обновление таблицы соединений)
Что я уже сделал до сих пор:
В моем просмотров/сообщений/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
Моя проблема:
Когда я кликаю по ссылкам, мой вид таблицы не обновляются? (Например, в моей рельсах консоли 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 ** вы используете ссылку во втором параметре или Hash с ** контроллером ** и ** действием **. Но использовать оба кажется, что нет смысла – djothefou
изменить его на '@ post.views.! Create()' и обновить нас с помощью нового журнала ошибок, скорее всего, произошла ошибка, которая не выполняется или вы передаете неправильное значение функции create – amrdruid