我正在尝试渲染表单以上传歌曲。 我有播放列表模型和歌曲模型,歌曲是播放列表的嵌套资源。
使用简单的表单,当我尝试将新歌部分渲染时,我得到if (str.charAt(i)>=48 && str.charAt(i)<=48+9) { // english digit
builder.append((char)(str.charAt(i)-48+1632)); // convert from english to arabic digit
在路线中,新的歌曲路径是undefined method songs_path for #<#<Class:0x007fdc51980870>
但似乎并不是简单的形式知道这一点。
歌曲控制器:
new_playlist_song
播放列表控制器:
class SongsController < ApplicationController
def new
@song = Song.new
end
def create
@song = Song.new(song_params)
if @song.save
flash[:info] = "Song uploaded sensually"
redirect_to user_path(current_user)
else
render 'new'
end
end
def index
@song = Song.all
end
private
def song_params
params.require(:song).permit(:audio)
end
end
歌曲模型:
class PlaylistsController < ApplicationController
before_action :find_playlist, only: [:edit, :update, :destroy]
def index
@playlists = Playlist.all
end
def new
if user_signed_in?
@playlist = current_user.playlists.new
else
redirect_to(root_url)
flash[:danger] = "You have to register to purchase gigs"
end
end
def create
@playlist = current_user.playlists.new
@playlist.user_id = current_user.id
if @playlist.save
redirect_to new_playlist_path
else
render 'new'
end
end
def destroy
@playlist = Playlist.find(params[:id])
if @playlist.present?
@playlist.destroy
redirect_to playlists_path
end
end
private
def find_playlist
@playlist = Playlist.find(params[:id])
end
end
播放列表模型:
class Song < ActiveRecord::Base
belongs_to :playlist
has_attached_file :audio
validates_attachment_presence :audio
validates_attachment_content_type :audio, :content_type => [ 'audio/mp3','audio/mpeg']
end
路线:
class Playlist < ActiveRecord::Base
belongs_to :user
has_many :songs
end
创建新歌曲的用户个人资料链接:
resources :playlists do
resources :songs
end
我为simple_form表单尝试了一些变体。 新歌偏1:
<p> <%= @user.playlist.user_id %> </p>
<p> <%= @user.playlist.created_at %> </p>
<% if @user == current_user %>
<p> <%= link_to "Uploaad track", new_playlist_song_path(@user) %>
<% end %>
另一次尝试:
<%= simple_form_for ([@playlist, @song]) do |f| %>
<%= f.file_field :audio %>
<%= f.button :submit %>
<% end %>
我只是无法显示表单,我无法弄清楚为什么不。任何想法都将不胜感激,谢谢。
答案 0 :(得分:0)
正如评论中所指出的那样songs_path
未在您的代码中引用,因此它不应该存在,因为它是playlist
的子资源。
如果要列出所有可用路由,只需运行rake routes
并确保代码引用现有路径。
答案 1 :(得分:0)
我没有定义该歌曲所属的播放列表。
添加到控制器
def create
@song = current_user.playlist.songs.new song_params
@song.playlist_id = @playlist.id
if @song.save
和
def find_playlist
@playlist = Playlist.find(params[:id])
end
然后以简单的形式
<%= simple_form_for ([@playlist, @playlist.songs.build]) do |f| %>
有效。