刚才我开始研究Ruby on Rails。
ruby version=1.8.7
rails version =2.3.2
我创建了删除并创建了新的用户操作,但是出现了一些错误, 错误是:
uninitialized constant User::Id
Extracted source (around line #19):
16: <td><%= user.fname %></td>
17: <td><%= user.lname %></td>
18: <td><%= user.dob %></td>
19: <td><%= button_to "delete", :url => {:controller => :users,:action => 'destroy',:id =>user.id}, :method => :delete %></td>
20: </tr>
21: <% end %>
22: </table>
我的MySQL数据库表是:
id fname lname dob
1 kamal vimal 2012.02.12
2 rahu sharmi 2012.05.26
3 mithun kavi 2012.03.07
班级用户:
class User < ActiveRecord::Base
set_primary_key :id
has_one :id
end
我的控制器是:
class UsersController < ApplicationController
def index
@users=User.all
end
def destroy
# User.primary_key='id'
@users=User.find(:id)
@users.destroy
flash[:notice] = "You have successfully Delete Recode"
end
def new
@users=User.new
end
def create
@users=User.new(params[:users])
if @user.save
redirect_to_users_path
flash[:notice] = "Your record is created!"
else
render :action => "index"
end
end
end
我的观点是:
<% @users.each do |user| %>
<%= button_to "delete", :url => {:controller => :users,:action => 'destroy',:id =>user.id}, :method => :delete %>
<% end %>
任何人都可以帮助我?
答案 0 :(得分:0)
我看到了一些误解。
如果查看控制器中的删除方法
def destroy
@users=User.find(:id)
[...]
您正在将符号传递给find功能,而不是删除请求中的ID。您可以使用 params [:id] 来获取ID,就像使用create function一样。
def destroy
@users=User.find(params[:id])
[...]
以下只是建议。
我还会在此处以及new和create方法中将实例变量名称从 @users 更改为 @user ,因为您正在获取/构建单个用户
如果您的routes.rb设置为
ActionController::Routing::Routes.draw do |map|
map.resources :users
end
您无需在 button_to 帮助器中指定指定控制器和操作的网址,但您可以使用路径帮助
button_to "delete", user_path(user), :method => :delete
您可以删除这两个语句。
只有当表中的主键与默认的“id”不同时,才应使用 set_primary_key 。
该关联被滥用。
使用has_one方法告诉Rails 用户模型与模型'id'通过 1:1关系<相关< / strong>,我想,这不是你想要的。
如果不这样做,请仔细阅读Ruby on Rails guide,这是一个很好的起点。
此外,您正在使用真正旧版本的Rails和Ruby,这些版本不再受支持。如果没有任何具体原因,比如在遗留项目上工作,我建议你在ruby 2.2上学习像Rails 4这样的更新版本。