我有一个属于User的项目。在我的用户视图中,我有一个链接来添加一个新项目,其中包含我想要添加项目的用户的参数。
<%= 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
如何在渲染后为用户保留参数?或者有更好的方法来做到这一点?一直在看很多类似的问题,但无法让它发挥作用。
答案 0 :(得分:2)
尝试
render :action => "new", :id => @project.id
如果它不适合您,请尝试其他方式将参数传递给您的渲染操作。
这也可以帮助你 - > Rails 3 Render => New with Parameter
答案 1 :(得分:2)
您不应使用params[:id]
为此表单字段指定值。而是将其添加到控制器中的#new
操作:
def new
@project = Project.new(user_id: params[:id])
end
然后只需在表单中写下:
<%= f.hidden_field :user_id %>
由于@project
和#new
操作中已定义#create
,并且因为它已包含分配了user_id
的项目实例,因此会自动添加该值到这个领域。