找不到没有id的用户 - Rails

时间:2012-06-20 04:25:55

标签: ruby-on-rails ruby

我刚刚开始使用Rails。我有一个模型,“用户”,它有很多“列表”。在用户显示视图中,我创建了一个表单来为当前用户创建列表。提交表单时,我收到以下错误:

  

找不到没有ID的用户

我认为设置嵌套List表单的方式有问题。

用户 - > show.html.erb

    <p id="notice"><%= notice %></p>

<p>
  <b>Username:</b>
  <%= @user.username %>
</p>

<p>
  <b>Password:</b>
  <%= @user.password %>
</p>

<p>
  <b>Email:</b>
  <%= @user.email %>
</p>

<h2>Add a List</h2>
 <%= form_for([@user, @user.lists.build]) do |f| %>
 <div class ="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
</div>
<div class="field">
    <%=f.label :description%><br />
    <%=f.text_field :description%>
</div>
<div class="actions">
    <%= f.submit %>
</div>

<% end %>



<%= link_to 'Edit User', edit_user_path(@user) %> |
<%= link_to 'Back to Users', users_path %>

这是“创建”控制器动作列表。

 class ListsController < ApplicationController
    def create
        @user = User.find(params[:id])
        @list = @user.lists.create(params[:list])
        redirect_to user_path(@user)        
    end
end

更新:在UserController上显示方法

 # GET /users/1
  # GET /users/1.json
  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end

更新:我的路线

    resources :users do
      resources :lists
  end

  get "home/index"

params [:id]是不是以某种方式?我错过了什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

你能试试吗?由于这不是RESTUL路由(请参阅http://guides.rubyonrails.org/form_helpers.html),您可能必须指定希望表单在form_for标记中命中的URL(控制器和操作)。如果仍未传递用户ID,您还可以使用hidden_​​field在表单中显式传递它。如果这不能解决问题,请告诉我......

在视图(show.html.erb)

<h2>Add a list</h2>
<%= form_for [@user, @list] do |f| %>
<div class ="field">

<%= f.label :title %><br />
<%= f.text_field :title %>

<%=f.label :description%><br />
<%=f.text_field :description%>

<%= f.submit %>
<% end %>

在用户控制器中:

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    @list = @user.list.new
  end
end

在列表控制器中:

 class ListsController < ApplicationController
   def create
     @user = User.find(params[:user_id])
     @list = @user.lists.build(params[:list])
     @list.save
     redirect_to @user # or wherever
   end
end

答案 1 :(得分:1)

确保您在创建操作中使用params[:user_id],而不是params[:id]

class ListsController < ApplicationController
    def create
        @user = User.find(params[:user_id]) 
        @list = @user.lists.create(params[:list])
        redirect_to user_path(@user)        
    end
end