【问题标题】:Rails 4.1.4 ActionController param is missing or the value is empty: nameRails 4.1.4 ActionController 参数丢失或值为空:名称
【发布时间】:2014-09-21 03:37:37
【问题描述】:

我在学习如何编码方面相对较新,我真的很难理解如何编写代码以处理 Rails 4.1.4 应用程序控制器中私有方法中的参数,以便我的应用程序通过允许正常工作我输入一个新的相册名称,将其保存到数据库中,并将其持久化,以便添加的新相册的名称正确显示(目前,它根本无法正常工作)。有人可以帮帮我吗?任何帮助都将不胜感激。

这是我的相册控制器的代码:

        class AlbumsController < ApplicationController
           def index
             @albums = Album.all
           end

           def new
             @album = Album.new
           end

           def create
             @album = Album.new(album_params)
             @album.save
             redirect_to albums_path
           end

           def show
             @album = Album.find(params[:id])
           end

           def edit
           end

           def update
           end

           private

           def album_params
             params.require(:name).permit(:id, :category)
           end
         end

另外,这是我的专辑模型:

          class Album < ActiveRecord::Base
            belongs_to :user
            has_many :photos
          end

这是我的专辑迁移:

          class CreateAlbums < ActiveRecord::Migration
            def change
              create_table :albums do |t|
                t.string :name  # Column for album name of type string
                t.string :category # Column for photography category of type string

                t.timestamps
              end
            end
          end

这是我的 app/views/albums/index.html.erb 文件的代码:

     <div><%= link_to "Admin Access to Add New Album", new_album_path %></div>
       <div><%= link_to "Home", root_path %></div>

     <h1>Albums Gallery</h1>

      <% @albums.each do |album| %>
        <div><%= link_to album.name, "/albums/#{album.id}" %></div>
      <% end %>

这是我在 app/views/albums/new.html.erb 文件中使用 form_for 的代码:

        <h2>New Albums</h2>
        <%= link_to "Back", albums_path %>

        <%= form_for (@album) do |f| %>
          <div>
            <%= f.label :name %>
            <%= f.text_field :name %>
          </div>
          <%= f.submit "Add Album" %>
        <% end %>

我尝试输入新相册名称的 form_for 部分的所有内容都有效。正是在这一点上,一切都瓦解了,对我不起作用。它不是接受然后按名称显示新专辑,而是在应该显示“自然场景”时显示“/albums/3”。我进入我的 Rails 控制台查看数据库级别发生了什么,并且没有正确创建和保存新专辑。我的 Rails 控制台输出如下所示:

2.1.2 :007 > Album.all 专辑加载 (0.2ms) SELECT "albums".* FROM "albums" => #, #, #,

, #

nil,类别:nil,created_at:“2014-09-21 02:50:54”,updated_at: "2014-09-21 02:50:54">]> 2.1.2:008 >

(很抱歉复制/粘贴,但是我在尝试学习如何编码方面太新了,我在 Stackoverflow 上没有足够的声望点来允许简单地发布屏幕截图。)

【问题讨论】:

  • 没关系。在阅读了整本 Rails 4 Way 书后,我终于找到了问题的答案。我需要将 :name 的私有方法参数值更改为 :album。现在可以了。我自己解决了这个问题,并让应用程序正常运行(至少,就我使用该应用程序而言,我还有很长的路要走)。

标签: strong-parameters ruby-on-rails-4.1


【解决方案1】:

好吧,没关系,我明白了。我在私有方法中有错误的值。我把它改成

       def album_params
         params.require(:album).permit(:id,:name, :category)
       end

现在该应用程序运行良好(至少到目前为止 - 我还有很长的路要走)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 2021-11-20
    相关资源
    最近更新 更多