0

Railsを使い始めたばかりです。「ユーザー」というモデルがあり、「リスト」がたくさんあります。ユーザーショービューで、現在のユーザーのリストを作成するためのフォームを作成しました。フォームを送信すると、次のエラーが発生します。

IDのないユーザーが見つかりませんでした

ネストされたリストフォームの設定方法に問題があると思います。

ユーザー->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のshowメソッド

 # 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]はどういうわけかnilですか?私は何が欠けていますか?

ありがとう!

4

3 に答える 3

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
于 2012-06-20T04:47:06.880 に答える
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
于 2012-06-20T05:49:12.490 に答える
0

少なくともRails4(以前のバージョンについては不明)では、新しいビューのフォームでパラメーターを渡す場合、作成アクションでそのパラメーターを呼び出す場合は、呼び出しを少し変更する必要がありますresource_name_params[:user_id]。単にparams[:user_id]

特にあなたの場合、コントローラーのcreateメソッドは代わりに次のようになっている必要があります。

class ListsController < ApplicationController
   def create
     @user = User.find(list_params[:user_id])
     @list = @user.lists.build(list_params)
     ...
于 2015-09-20T00:14:46.440 に答える