我对Rails相当陌生,并且在理解我遗漏某些内容时遇到了问题。
我正在使用Rails 4,Devise,我有一个主User
模型,只包含password
,email
和user_name
这些是我的其他模型的常用字段:{ {1}},Artist
。
我的关系设置如下:
Fan
还有一个模型class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :account, polymorphic: true
validates_uniqueness_of :user_name
end
class Artist < ActiveRecord::Base
has_one :user, as: :account, dependent: :destroy
has_many :tracks, dependent: :destroy
accepts_nested_attributes_for :user
end
class Fan < ActiveRecord::Base
has_one :user, as: :account, dependent: :destroy
accepts_nested_attributes_for :user
end
belongs_to
:
Artist
我已经设法让多态连接正常工作,创建一个艺术家及其创建用户。现在我正在尝试创建class Track < ActiveRecord::Base
belongs_to :artist
end
连接。目前我正在接受它
创建新歌,但它没有在创建时建立关联。我收到的曲目没有关联的Artist/Track
我的歌曲控制器看起来像这样:
Artist_id = nil
另外......成功后创建class TracksController < ApplicationController
before_action :authenticate_user!, :except => [:index, :show]
before_action :set_track, only: [:show, :edit, :update, :destroy]
def new
@track = Track.new
@track.build_artist
end
def create
@track = Track.new(track_params)
if @track.save
flash[:notice] = "Track was successfully created."
redirect_to @artist
else
redirect_to new_artist_track_path
end
end
会给我一个ActionControllerError
“无法重定向到nil!
任何帮助将不胜感激
修改:解决redirect_to @artist
问题,将redirect_to
更改为
redirect_to @artist
仍然无法弄清楚如何在创建中保存与艺术家在轨道中的关联
编辑#2:这是我的redirect_to artist_path(current_user)
track_params
编辑#3: 这是表格:
def track_params
params.require(:track).permit(:track_title, :description, :track_type)
end
以下是创建后的日志:
<%= bootstrap_form_for @track, :html => { :multipart => true } do |f| %>
<div class="field">
<%= f.label :track_title %><br>
<%= f.text_field :track_title %>
</div>
<div class="field">
<%= f.label :description %><br>
<%= f.text_field :description %>
</div>
<div class="field">
<%= f.label :track_type %><br>
<%= f.text_field :track_type %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:0)
@artist成员变量仅在每个请求中可用,因此您在新请求中创建的实例在创建请求中不可用,从技术上讲它是零。而且你没有重定向到记录,而是转向路线。
假设您已正确设置参数,并且正在创建关联,您可以重定向到artist_path(@ track.artist),但需要查看您的routes.rb文件以确保
答案 1 :(得分:0)
您可以在创建
后将艺术家设置为控制器中的当前用户def create
@track = Track.new(track_params)
if @track.save
self.update_attributes(artist: current_user)
flash[:notice] = "Track was successfully created."
redirect_to artist_path(@track.artist)
else
redirect_to new_artist_track_path
end
end