Ruby on rails 创建嵌套对象-如果唯一,则忽略保存,但仍生成子对象
我在一对多关系中创建嵌套对象时遇到一些困难。我的模特是艺术家和歌曲,一个艺术家可以有很多歌曲,一首歌曲必须属于一个艺术家 我遇到的问题是创作艺术家和歌曲。对于用户体验,我希望用户在创建艺术家的同时创建艺术家的歌曲,因此我的艺术家控制器如下所示:Ruby on rails 创建嵌套对象-如果唯一,则忽略保存,但仍生成子对象,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我在一对多关系中创建嵌套对象时遇到一些困难。我的模特是艺术家和歌曲,一个艺术家可以有很多歌曲,一首歌曲必须属于一个艺术家 我遇到的问题是创作艺术家和歌曲。对于用户体验,我希望用户在创建艺术家的同时创建艺术家的歌曲,因此我的艺术家控制器如下所示: def new @artist = Artist.new @artist.songs.build end def create @artist = Artist.new(params[:artist]) if
def new
@artist = Artist.new
@artist.songs.build
end
def create
@artist = Artist.new(params[:artist])
if @artist.save
redirect_to root_path
else
render :action => 'new'
end
end
然后是表格:
<div>
<%= f.label :name, "Artist" %>
<%= f.text_field :name %>
</div>
<%= f.fields_for :songs do |song| %>
<div>
<%= song.label :title, "Song" %>
<%= song.text_field :title %>
</div>
<% end %>
为现有艺术家创作新歌的地方。我现在可以通过添加链接和使用我的歌曲控制器/视图来实现这一点。我很困惑,如果没有用户输入,我怎么能做到这一点,而只是简单地构建歌曲
如果歌手姓名与歌曲信息一起存在,我是否应该使用Javascript提交post请求?我也可以向控制器添加逻辑,但不知道如何在控制器中添加基于验证的条件,这对我来说也很糟糕。有没有人有过类似的经历?感谢您的帮助。您正在挥舞一把相当可怕的剑,这里。当通过艺术家姓名进行验证时,您是否可以确保歌曲可能不是针对同名的其他艺术家?因为如果你的项目涉及面很广,那么你不可避免地要交叉连接数据 我建议不要事后检查,而是在用户输入艺术家的名字时,使用jQuery自动完成插件,这样用户就可以选择已经存在的艺术家 如果这个人输入了一个艺术家的名字,而这个艺术家确实已经存在(使用find_by_name就可以了),那么我会将他们重定向到一个中间页面,上面会有一个通知:“已经有一个艺术家有这个名字了。这就是你要找的艺术家吗?”其中包含了数据库中找到的艺术家的一些基本信息。然后你可以有两个链接:一个说“是”并协助创作,另一个说“不,创建一个新的艺术家”并从那里开始 在我看来,您应该能够使用rails完成所有这些,而不需要任何ajax发布。确保您正在监视参数从一页传递到另一页。使用
重定向
或渲染
可更改该属性
@artist = Artist.find_by_name(params[:artist_name])
@song = @artist.songs.new