【发布时间】: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