【问题标题】:Rails - Object Not Getting Created From 'New' FormRails - 未从“新”表单创建对象
【发布时间】:2013-06-27 20:23:33
【问题描述】:

我是 Rails 新手,你能检查一下我的代码,看看我哪里出了问题。我正在尝试创建一个 Song 对象。

通过查看我的 SQLite 文件,我可以看到没有创建新歌曲。

在views/songs/new.html.erb中

<!DOCTYPE html>
<html>
    <head>
      <title>MusicDiscoveryApp</title>
      <%= stylesheet_link_tag    "application", :media => "all" %>
      <%= javascript_include_tag "application" %>
      <%= csrf_meta_tags %>
    </head>
    <body>
          <%= form_for(@song, :html => {:id => 'add-to-library', :method => :post}) do |f| %>
            <div class="item-info">
              <%= f.select :category_id, [['Pop', 1], ['Rock', 2], ['Rap', 3], ['Reggae', 4], ['Other', 5]] , {:prompt=>"Select A Category"}, :id=>"choose-category"%>
            </div>
              <div class="item-info">
                <%= f.text_field :name , :placeholder=>"Song Name"%>
            </div>
            <div class="item-info">
              <%= f.text_field :price, :placeholder=>"Price"%>
            </div>
              <div class="item-info">
                <%= f.text_area :details ,:placeholder=>"Details"%>
            </div>
            <div class="item-actions">
              <%= f.submit "Post to Songs Library", :class=>"add-song"%>
            </div>
          <% end %>
    </body>
</html>

songs_controller.rb 中的“新”方法 - 它是自动生成的

  def new
    @song = Song.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @song }
    end
  end

songs_controller.rb 中的“create”方法 - 也是自动生成的

  def create
    @song = Song.new(params[:song])
  end

感谢您的宝贵时间,希望您能向我解释我在这里做错了什么。再次感谢。

【问题讨论】:

  • ActiveRecordnew 方法不会将新记录保存到数据库中。
  • @AlexWayne 只是好奇,为什么不呢?有没有不保存对象的新实例的用例?
  • 因为你想在保存对象之前先在内存中构建对象,让你有机会操作它,也许它不会通过验证,各种原因。查看您的 new 控制器操作,它为您的表单创建一个对象以呈现其属性。您不想保存它,因为它还没有数据。
  • 好的。这就说得通了。虽然,在 RailsForZombies 源代码中,他们从未保存/创建它,这似乎出于某种原因。感谢您的帮助,@AlexWayne,现在对我来说很有意义

标签: html ruby-on-rails ruby forms


【解决方案1】:

歌曲未保存。添加:

@song = Song.new(params[:song])
@song.save

到您的控制器创建方法或更改新创建

@song = Song.create(params[:song])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多