我正在尝试创建一个应用来制作属于许多用户的相册,并且用户拥有多个相册。但是,每当我尝试创建相册时,我的@ user.album.count似乎都没有改变。
album / new.html.erb
<%= form_for (@album), url: user_albums_path, :html => { :id => "uploadform", :multipart => true } do |f| %>
<div>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :description %>
<%= f.text_area :description %>
<br>
<%=f.submit %>
</div>
<% end %>
专辑控制器
class AlbumsController < ApplicationController
def index
@user = User.find(params[:user_id])
@albums = @user.albums.all
respond_to do |format|
format.html
format.json { render json: @albums }
end
end
def show
@albums = Album.all
@album = Album.find(params[:id])
@photo = Photo.new
end
def update
end
def edit
end
def create
@user = User.find(params[:user_id])
@album = @user.albums.build(params[:album])
respond_to do |format|
if @album.save
format.html { redirect_to user_path(@user), notice: 'Album was successfully created.' }
format.json { render json: @album, status: :created, location: @album}
else
format.html { render action: "new" }
format.json { render json: @album.errors, status: :unprocessable_entity }
end
end
end
def new
@user = User.find(params[:user_id])
@album = Album.new
end
def destroy
end
end
模型
#album model
class Album < ActiveRecord::Base
attr_accessible :avatar, :name, :description
has_many :user_albums
has_many :users, :through => :user_albums
has_many :photos
end
#user model
class User < ActiveRecord::Base
has_secure_password
attr_accessible :email, :name, :password, :password_confirmation
validates_presence_of :password, :on => :create
validates_format_of :name, :with => /[A-Za-z]+/, :on => :create
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create
validates_length_of :password, :minimum => 5, :on => :create
has_many :user_albums
has_many :albums, :through => :user_albums
accepts_nested_attributes_for :albums
end
#photo model (not up to there yet)
class Photo < ActiveRecord::Base
belongs_to :album
end
配置/路由
Pholder::Application.routes.draw do
resources :users do
resources :albums
end
resources :albums do
resources :photos
end
root :to => "users#index"
这是我的控制台
在2012-10-01 17:41:59 -0400开始获取127.0.0.1的“/assets/application.js?body=1” 服务资产/application.js - 304未修改(0ms) [2012-10-01 17:41:59]警告无法确定响应正文的内容长度。设置响应的内容长度或设置Response#chunked = true
在2012-10-01 17:42:11 -0400开始发布“/ users / 13 / albums”for 127.0.0.1 由AlbumsController处理#create as HTML 参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“ttqQnEt1KFuwvYRU6MuOLgc5UprSE / zMzGMuzzZiZiE =”,“album”=&gt; {“name”=&gt;“fdsafds”,“description”=&gt;“ fdafdsfafdsfadsfsdsa“},”commit“=&gt;”创建专辑“,”user_id“=&gt;”13“} 用户负载(0.1ms)SELECT“users”。* FROM“users”WHERE“users”。“id”=?限制1 [[“id”,“13”]] (0.0ms)开始交易 SQL(0.3ms)INSERT INTO“albums”(“created_at”,“description”,“name”,“updated_at”)VALUES(?,?,?,?)[[“created_at”,Mon,01 Oct 2012 21: 42:11 UTC +00:00],[“description”,“fdafdsfafdsfadsfsdsa”],[“name”,“fdsafds”],[“updated_at”,星期一,01十月2012 21:42:11 UTC +00:00 ]] (5.6ms)提交事务 重定向到http://localhost:3000/users/13 完成302发现在9ms(ActiveRecord:6.0ms)
答案 0 :(得分:2)
好的,我发现了问题。当您使用构建方法
通过用户创建相册时@album = @user.albums.build(params[:album])
然后是你必须保存的用户,
@user.save
所以你的新创建方法是
def create
@user = User.find(params[:user_id])
@album = @user.albums.build(params[:album])
respond_to do |format|
if @user.save
print @album.errors
format.html { redirect_to user_path(@user), notice: 'Album was successfully created.' }
format.json { render json: @album, status: :created, location: @album}
else
format.html { render action: "new" }
format.json { render json: @album.errors, status: :unprocessable_entity }
end
end
end