【问题标题】:Keep params after render Ruby on Rails渲染 Ruby on Rails 后保留参数
【发布时间】:2013-02-20 08:41:26
【问题描述】:

我有一个属于用户的项目。在我的用户视图中,我有一个添加新项目的链接,其中包含我想要添加项目的用户的参数。

<%= 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

如何在渲染后为用户保留参数?还是有更好的方法来做到这一点?一直在查看很多类似的问题,但无法解决问题。

【问题讨论】:

    标签: ruby-on-rails form-for


    【解决方案1】:

    试试

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

    如果它不适合您,请尝试其他方式将参数传递给您的渲染操作。

    这也可以帮助你-> Rails 3 Render => New with Parameter

    【讨论】:

    • 您使用的是哪个版本的 Rails?
    【解决方案2】:

    您不应使用params[:id] 为该表单字段赋值。相反,将其添加到控制器中的 #new 操作中:

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

    然后在你的表单中写下这个:

    <%= f.hidden_field :user_id %>
    

    因为@project 是在您的#new#create 操作中定义的,并且因为它已经包含一个分配有user_id 的项目实例,所以该值将自动添加到该字段中。

    【讨论】:

    • 这是人们遵循的 Rails 方式,使用 params[:id] 手动分配值会给你带来更多麻烦,因为 render :new 用于失败的表单不会自动返回参数,因此问题是为什么一开始问
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2010-11-10
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多