我正在构建一个音乐流媒体应用程序,并且忙于喜欢功能。流程是用户看到曲目列表然后喜欢曲目。然后,用户导航到“喜欢”页面,在那里他们可以看到他们喜欢的所有曲目。
当用户单击“心脏”图标时,我正在尝试使用具有两个隐藏字段的simple_form 。一个字段填充了track.id,另一个字段应采用@likes.id。但是,由于用户不应该创建“喜欢播放列表”,因此我没有可用的 likes_id。
正如预期的那样,导航到喜欢页面时出现的错误是找不到没有 ID 的喜欢
问题:谁能澄清我如何创建一个 likes_id 而不必在 new.html.erb 中创建一个?
旁注:用户当前可以创建多个播放列表,并且可以将歌曲添加到所选播放列表中,我尝试按照相同的逻辑来点赞,如果我离开了,我深表歉意。
这是我的路线
resources :likes do
resources :tracks
end
用户模型
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :playlists
has_many :tracks
has_many :albums
has_many :likes
has_one_attached :photo
end
喜欢模特
class Like < ApplicationRecord
has_many :liked_tracks
has_many :tracks, through: :liked_tracks
belongs_to :user
has_one_attached :photo
end
这是我的曲目和喜欢之间的连接表
class LikedTrack < ApplicationRecord
belongs_to :like
belongs_to :track
end
我的足迹模型
class Track < ApplicationRecord
belongs_to :album
belongs_to :user
has_many :playlist_tracks
has_many :playlists, through: :playlist_tracks
has_many :likes, through: :liked_tracks
has_many :tags, through: :tags_tracks
accepts_nested_attributes_for :playlist_tracks, allow_destroy: true
validates :title, presence: true, length: { in: 1..20 }
validates :description, presence: true, length: { in: 10..60 }
has_one_attached :photo
has_one_attached :track
end
这是我的点赞控制器
class LikesController < ApplicationController
def index
@tracks = LikedTrack.all
end
def show
@liked = Like.find(params[:id])
@tracks = @liked.tracks
end
def new
@liked = Like.new
end
def create
@liked = Like.new(track_params)
@liked.user = current_user
if @liked.save!
redirect_to likes_path(@liked)
else
render 'new'
end
end
private
def track_params
params.require(:liked_track).permit(:track_id, :like_id)
end
end
这是我的 LikedTracks 控制器
class LikedTracksController < ApplicationController
def new
@liked = Like.new
end
def create
@liked_track = LikedTrack.new(liked_track_params)
if @liked_track.save!
redirect_to station_index_path
else
render 'new'
end
end
private
def liked_track_params
params.require(:liked_track).permit(:track_id, :like_id)
end
end
这是我到喜欢页面的导航
<div class="flex">
<i class="fas fa-heart"></i>
<%= link_to "Liked", likes_path(current_user), class: "nav-text" %>
</div>
这是嵌入在每个跟踪卡中的表格
<%= simple_form_for @liked_track, url: liked_tracks_path, method: :post do |f| %>
<%= f.input :like_id, as: :hidden, input_html: { value: DESIRED @likes.id} %>
<%= f.input :track_id, as: :hidden, input_html: { value: track.id } %>
<%= button_tag type: 'submit', class: "like-button", id: "like-button" do %>
<i class="fas fa-heart"></i>
<% end %>
曲目应在 Likes (index.html.erb) 的索引页面上呈现。
谢谢并希望我提供的代码不是矫枉过正。如果您需要更新这篇文章,请告诉我!