Rails 4 嵌套表单字段未保存在数据库中

2023-11-30

我有用于输入专辑以及属于专辑的歌曲的表格。专辑正在保存到数据库,但个别歌曲没有保存。

相册模型

class Album < ActiveRecord::Base
    belongs_to :user
    has_many :songs, :dependent => :destroy
    accepts_nested_attributes_for :songs
    has_attached_file :image, :styles => { :large => "500x500>", :medium => "300x300>", :thumb => "100x100>" }

    validates :image, presence: true
    validates :title, presence: true

    extend FriendlyId
    friendly_id :title, use: :slugged


end

歌曲模型

class Song < ActiveRecord::Base
    belongs_to :album

    extend FriendlyId
    friendly_id :title, use: :slugged
end

相册控制器

class AlbumsController < ApplicationController
  before_action :set_album, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, except: [:index, :show]
  before_filter :verify_is_admin, except: [:index, :show]


  def index
    @albums = Album.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 8)
  end

  def show
  end

  def new
    @album = current_user.albums.build
    3.times { @album.songs.build }
  end

  def edit
  end

  def create
    @album = current_user.albums.build(album_params)
    if @album.save
      redirect_to @album, notice: 'Album was successfully created.'
    else
      render action: 'new'
    end
  end

  def update
    if @album.update(album_params)
      redirect_to @album, notice: 'Album was successfully updated.'
    else
      render action: 'edit'
    end
  end

  def destroy
    @album.destroy
    redirect_to albums_url
  end


  private

    def verify_is_admin
      (current_user.nil?) ? redirect_to(root_path) : (redirect_to(root_path) unless current_user.admin?)
    end

    # Use callbacks to share common setup or constraints between actions.
    def set_album
      @album = Album.find_by_slug(params[:id])
    end

    def correct_user
      @album = current_user.albums.find_by(id: params[:id])
      redirect_to albums_path, notice: "Not authorized to edit this album" if @album.nil?
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def album_params
      params.require(:album).permit(:title, :image, :embed, :embed_html)
    end
end

歌曲控制器

class SongsController < ApplicationController
  before_action :set_song, only: [:show, :edit, :update, :destroy]


  def index
    @songs = Song.all
  end

  def show
  end

  def new
    @song = Song.new
  end

  def edit
  end

  def create
    @song = Song.new(song_params)

    respond_to do |format|
      if @song.save
        format.html { redirect_to @song, notice: 'Song was successfully created.' }
        format.json { render action: 'show', status: :created, location: @song }
      else
        format.html { render action: 'new' }
        format.json { render json: @song.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    respond_to do |format|
      if @song.update(song_params)
        format.html { redirect_to @song, notice: 'Song was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @song.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @song.destroy
    respond_to do |format|
      format.html { redirect_to songs_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_song
      @song = Song.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def song_params
      params.require(:song).permit(:title)
    end
end

这是新相册视图的表单

<%= form_for @album, html: { multipart: true } do |f| %>
  <% if @album.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@album.errors.count, "error") %> prohibited this album from being saved:</h2>

      <ul>
      <% @album.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="form-group">
    <%= f.label :Artwork %>
    <%= f.file_field :image, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :title %>
    <%= f.text_field :title, class: "form-control" %>
  </div>

  <div class="form-group">
  <%= f.fields_for :songs do |builder| %>
    <fieldset>
      <%= builder.label :title, "Song" %><br />
      <%= builder.text_field :title, :rows => 3 %>
    </fieldset>
  <% end %>
  </div>

  <div class="form-group">
    <%= f.submit class: "btn btn-primary" %>
  </div>

<% end %>

您需要告诉您有关歌曲参数的强大参数:

def album_params
  params.require(:album).permit(:title, :image, :embed, :embed_html,
                                :songs_attributes => [:id, :_destroy, :title])
end

不要忘记包含您希望能够更新的所有歌曲属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 4 嵌套表单字段未保存在数据库中 的相关文章

  • 如何最好地将地址关联到 Rails 中的多个模型?

    这个问题 https stackoverflow com questions 648463 best way to model customer addresson SO 似乎与我的问题有关 但我不确定我的问题是否得到了回答 一个地址可以属
  • 如何让 Sublime Text 2 与 Ruby on Rails 配合使用?

    我是 Ruby on Rails 的新手 这是我到目前为止所做的 我已经安装了 XCode Homebrew RVM Ruby 和 Rails 现在如何让 Sublime Text 2 与 Ruby on Rails 一起使用 你应该做的第
  • Capistrano 部署擦除数据库?

    我已成功使用 Capistrano 将我的应用程序部署到生产环境 但我不明白如何处理我的数据库 我正在使用颠覆和乘客 当我运行 cap 部署时 新部署会重新启动一切 它会清除添加到数据库中的数据 显然 必须有一个解决方案 但我很惊讶没有在网
  • 将 R 与 Rsruby 集成

    我想知道是否有人有将 R 集成到 Rails 中的经验 特别是在 heroku 上 我熟悉 rsruby gem 它是 ruby 与 R 事实上的 也许是唯一的 绑定 但是有关将 R 与 Rails 集成的文档即使不是不存在 也是很少的 比
  • 如何通过Grape API获取路由

    我使用 gem grape 作为 api 我尝试通过命令获取 api urlrake grape routes namespace grape do desc routes task routes gt environment do API
  • 多步ActiveRecord的模型验证

    考虑具有以下字段的用户模型 名字 必填 姓氏 必填 电子邮件 必填 要求输入密码 电话 必填 大小 10 位数字 地址 必填 以及包含以下步骤的多步骤注册表单 第一步 包含 名字 姓氏 和 电子邮件 字段 第二步输入密码 电话和地址 您将如
  • 动态分配背景图片scss/sass

    我想要做的是有一个表单 您可以在其中上传图片 然后当您查看该对象时 图片会在特定 div 中居中 垂直和水平向上倾斜 其大小未知等 除非有办法使用 image tag 帮助器将其垂直居中 否则我希望能够使用该图像作为背景图像 在我的 css
  • Rails 急切加载计数?

    使用 include 属性可以很好地进行预加载 Post find all include gt author 我想知道您是否也可以急切加载计数 例如我是否想获取每个帖子的评论数量 而不加载所有评论本身 也许像 Post find all
  • 我可以从安装 Rails 引擎的真实应用程序运行它的规格吗?

    我有一个 Rails 引擎 旨在为我们的一个更大的项目提供一些模型和控制器 引擎有一套相当不错的规格 在引擎的虚拟应用程序中使用了一堆模拟和一些全尺寸模型和控制器 以确保引擎正在做它应该做的事情并与更大的应用程序一起工作 然而 即使所有测试
  • 对 Rails 3.1 中的特定路由强制使用 SSL

    我需要强制启用 SSL所有路线在我的申请中除了landing index In config application rb 我有 config force ssl true Then in landing controller rb 我有
  • 在 Rails 5.1 及更高版本中,使用什么来代替“render :text”(和“render Nothing: true”)?

    轨道 5 1 其中就有老朋友render text 当你需要渲染的时候它非常有用some文本 但不想要视图模板的开销 例子 render text ok render text t business rules project access
  • Rails - 可以在 javascript 函数中设置 Rails 变量吗?

    在 javascript 函数中设置 Rails 变量有什么问题吗 我无法在谷歌上搜索到明确的答案 只是想确保没有我不知道的陷阱或缺陷 我实际上对它是如何工作的感到困惑 如果 javascript 在客户端执行 我不会假设 Rails 会在
  • 使用 RSpec 进行 Rails 片段缓存测试

    我觉得这是一个没有太多记录的主题 至少我在这里找到最佳实践时遇到了很多麻烦 我使用 cache key 在视图中进行片段缓存 tbody employees each do employee cache employee do tr emp
  • 在 Mac 上使用“sudo gem install nokogiri”安装 nokogiri 时出错

    我试图安装 nokogiri 因为它是启动 Rails 所必需的 rails s usr local rvm gems ruby 1 9 3 p194 global gems bundler 1 1 5 lib bundler spec s
  • 适用于移动应用程序的 Rails REST API。会议

    我正在创建一个移动应用程序 该应用程序拥有用户并与后端的自定义 Rails REST API 进行通信 我应该在登录时创建会话吗 或者我应该在每个请求中发送用户名和密码 如果会议是可行的方法 那么通常是如何实施的 只需生成令牌 并使用它们来
  • Rails - 格式日期字段

    如何设置 date field 的日期格式样式 我得到了以下表格 这是为日期字段呈现以下 HTML
  • MongoMapper 和 bson_ext 问题

    我无法让 MongoMapper 与我的 Rails 应用程序一起使用 我收到此错误消息 注意 C 扩展未加载 这是最佳 MongoDB Ruby 驱动程序性能所必需的 您可以按如下方式安装扩展 宝石安装 bson ext 如果安装后继续收
  • 如果不选择 Updated_at 属性,则无法更新 Rails 4 中的模型

    我正在从 Rails 3 2 13 升级到 4 并遇到更新模型的问题 我正在尝试仅更新模型上的单个属性 其中我只有 id 我还需要验证和回调 这在 Rails 3 中运行良好 但在 Rails 4 中遇到了麻烦 在 Rails 4 中 如果
  • “捆绑安装”是否会在我的计算机上永久安装所有必需的 gem?

    我是 Rails 新手 正在学习捆绑器 我明白那个bundle install安装 gemfile 中指定的所有 gem 但将它们安装到哪里 是否将它们永久安装在我的计算机上 以便将来的任何项目都可以使用它们 如果是这样 这是否意味着我的计
  • 将 URL 转换为 JSON 版本?

    在我的应用程序的所有页面上 我想要一个指向当前页面的 JSON 版本的链接 有什么巧妙的技巧可以做到这一点吗 当 URL 中包含额外的 参数时 情况就变得复杂了 所以 url 将被转置为 users gt users json users

随机推荐

  • IE10选择框菜单显示上方

    我在 IE10 中测试我的应用程序 发现选择框有一个奇怪的行为 所选选项会突出显示 上方 下方选项会显示在所选选项的上方 下方 This happens only in IE10
  • 通过名称获取类

    如果我的应用程序中有一个名为 TestActivity 的 Activity 类 有没有办法通过名称获取其类 如下例所示 Class act Class forName com bla TestActivity catch ClassNot
  • 在不知道包名称的情况下加载特定文件夹中的所有类 - java

    我有一个代码加载具有相同包名称的文件夹中的所有类 second 我如何更改它以加载具有引用包的文件夹中的所有类 而不是在second 而且我们不知道包名 int classCounter 0 File folderAdded new Fil
  • 让我的文本框理解 html img 标签

    当在我的文本框中插入新的表情符号时 我希望显示为表情符号图像而不是表情符号符号 我怎样才能做到这一点而不是 gt 将代表它的图像放在我的文本框中 一种方法 使用文本框代替文本框 div div 当用户键入时 更改图像中笑脸的出现次数 提交表
  • 如何检查 JSON 数组是否等于

    我正在使用 JSON 和 Flot 创建饼图 创建饼图的 JS 函数从 Django 接收以下格式的 JSON 数组 1 3 2 5 4 如果没有数据 则 JSON 数组为 0 0 0 0 0 我正在尝试调整该函数 以便如果没有数据 则不会
  • 当 IDENTITY_INSERT 设置为 OFF 时,C# 无法在表“Rentals”中插入标识列的显式值

    我目前正在学习 ASP NET MVC 并且正在学习通过其 ID 获取对象并将其引用插入数据库 但是 我收到此错误 当 IDENTITY INSERT 设置为 OFF 时 无法在表 Rentals 中插入标识列的显式值 我读过周围的内容 注
  • 在 R 中使用 2 列映射数据帧来更改主数据帧中的值

    如果这是一个重复的问题 我很抱歉 我感觉有人问过这个问题 但我会提供一个很好的例子来帮助理解这一点 首先是演示数据帧 gt map df data frame name c nick mike joe tom id c 1 2 3 4 st
  • 用逗号格式化大数字

    我需要格式化一个数字 以便对于超过 包括 10000 的任何数字都用逗号分隔千位 例如 10000 变为 10 000 但 9999 仍保留为 9999 我想使用格式字符串来执行此操作 因为我不想测试数据以查看它是否在什么范围内 有谁知道如
  • 使用数据适配器更新记录时出现并发错误

    这是我的桌子 Student StudentId int PK autoincrement Name varchar 20 当我尝试更新最后添加的记录时 我收到错误 Error Concurrency violation the Updat
  • 将符号“%”替换为单词“百分比”

    如何用单词 百分比 替换符号 我的原始字符串是 内部 外部 该字符串应为 内部 百分比 外部 百分比 使用正则表达式 如何替换这个符号 提前致谢 阿图尔 这里不需要正则表达式 您可以使用常规替换 例如使用 net string s Inte
  • 在具有 5M+ 行的表上使用 ORDER 和 LIMIT 优化 SELECT ... UNION ... 查询

    我有一个大约 5M 行数据 文章 的表 我有以下查询 用于在两种不同语言的文章标题中进行全文搜索 问题是它需要大约 15 秒才能执行 MySQL version 5 6 29 log 这是查询 SELECT id title title f
  • Glassfish 5 忽略 JAXB @XmlJavaTypeAdapter 注释?

    我刚刚从 Glassfish 4 切换到 Glassfish 5 我注意到 Glassfish 不再调用我的 DateTimeAdapter 类的 unmarshal 方法 它在 Glassfish 4 中工作正常 Web 服务类接收 js
  • 当 url 以 & 符号结尾时.NET WebApi 中断

    我有一个 ApiController 例如 Home 控制器 其操作 Test 接受两个参数 test1 和 test2 两者都具有默认值 System Web Http HttpGet public ActionResult Test i
  • 如何在 Java 中弹出卷?

    如何使用 Java 跨平台 弹出 卷 我有一个程序可以在可移动驱动器 USB 存储卡读卡器 上执行一些操作 一旦完成 我希望该程序弹出 卸载 删除 取决于我们正在谈论的操作系统术语 存储卡 有没有可靠的跨平台方法来做到这一点 可能不是您正在
  • Java 和 C/C++ 程序之间的命名管道

    我想在Windows中使用命名管道在用Java和C编写的两个应用程序之间进行通信 通常我使用套接字连接来做到这一点 但现在我必须取消这个想法并寻找新的解决方案 我读到 java 中的命名管道只能在 JVM 内部可见 这是真的吗 有没有办法在
  • 自动生成问题处理

    这更多的是一种观察 而不是一个真正的问题 MS Access 以及一般的 VBA 非常缺少一个可以自动生成错误处理代码以及在发生错误时可以显示行号的工具 你找到解决办法了吗 它是什么 我刚刚意识到 自从几年前找到这个基本问题的正确答案以来
  • 页面重新加载后如何维护复选框切换的 div 的状态?

    我有一个 div 当选中复选框时出现 并在未选中时隐藏 如果表单有错误 页面会重新加载 并且即使在提交之前选中了该复选框 div 也会显示为隐藏 我可以添加对 onLoad 事件的调用 但是是否有更简洁的方法来确保页面重新加载后 根据复选框
  • IEnumerable 到字符串[重复]

    这个问题在这里已经有答案了 我以前从未偶然发现过这一点 但现在我遇到了 并且很惊讶我找不到一种真正简单的方法来转换IEnumerable
  • 合并两列中两个sql查询的结果

    Query 1 SELECT COUNT A EMPNO AS PRESENT FROM ERPDATA NIITESS DBO ZEMP MASXST WEB AL A INNER JOIN PPA EVENTWISEEMPLOYEEMA
  • Rails 4 嵌套表单字段未保存在数据库中

    我有用于输入专辑以及属于专辑的歌曲的表格 专辑正在保存到数据库 但个别歌曲没有保存 相册模型 class Album lt ActiveRecord Base belongs to user has many songs dependent