8

ユーザーに属するプロジェクトがあります。私のユーザー ビューには、新しいプロジェクトを追加するためのリンクがあり、プロジェクトを追加するユーザーのパラメーターが含まれています。

<%= link_to 'Add new project', :controller => "project", :action => "new", :id => @user %>

Url: /projects/new?id=62 

プロジェクトをユーザーに追加すると機能します。問題は、新しいプロジェクトの追加中に検証が失敗し、レンダリングを行う場合です。

def create

    @project = Project.new(params[:project])

    if @project.save
        redirect_to :action => "show", :id => @project.id
    else
        render :action => "new"
    end

end

見る:

<%= form_for @project do |f| %>

    <%= f.label :name %>
    <%= f.text_field :name %>

    <%= f.hidden_field :user_id , :value => params[:id] %>

    <%= f.submit "Create project" %>
<% end %>

ルート

resources :users do
 resources :projects
end

レンダリング後にユーザーのパラメーターを保持するにはどうすればよいですか? または、これを行うためのより良い方法はありますか?同様の質問をたくさん見てきましたが、うまくいきません。

4

2 に答える 2

4

params[:id]このフォーム フィールドに値を割り当てるために使用しないでください。#new代わりに、これをコントローラーのアクションに追加します。

def new
  @project = Project.new(user_id: params[:id])
end

そして、これをフォームに書くだけです:

<%= f.hidden_field :user_id %>

がandアクション@projectで定義されており、 が割り当てられた Project インスタンスが既に含まれているため、値がこのフィールドに自動的に追加されます。#new#createuser_id

于 2013-02-20T09:22:47.847 に答える
4

試す

render :action => "new", :id => @project.id

うまくいかない場合は、別の方法でパラメータをレンダー アクションに渡してみてください。

これも役立ちます-> Rails 3 Render => New with Parameter

于 2013-02-20T09:17:39.610 に答える