2017-10-07 42 views
0

对于我解释我想要的东西有点困难,但我仍会尽我所能。在没有资源的Rails中保存数据

我在Rails中创建了一个表单,用户可以填写某些字段。现在,一旦这些字段被填充,我知道我可以在路由器中使用资源,并在Controller中定义一个将数据保存到数据库的create方法。 但是我想要的是将保存在窗体中的数据传递给我的控制器。然后在控制器中创建一个自定义方法,就像传统的Create方法一样,但不是使用Resource方法传递参数,而是想将它们作为参数传递。它甚至有可能在Rails的:

这是我当前的视图中创建窗体:

<h1> Please add a new product</h1> 
<%= form_for @product do |p| %> 
    <p> 
    <%= p.label 'Product Name' %><br/> 
    <%= p.text_field :product_name %><br/> 
    </p> 
    <p> 
    <%= p.label 'Description' %><br/> 
    <%= p.text_area :description %><br/> 
    </p> 
    <p> 
    <%= p.label 'Price' %><br/> 
    <%= p.text_field :price %><br/> 
    </p> 
    <p> 
    <%= p.label 'Rating' %><br/> 
    <%= p.text_field :rating %><br/> 
    </p> 

<% end %> 

所以可我使用Ruby的建筑形式,但我只是想通过从视图参数来控制的方法。

感谢您的帮助!

+0

读http://guides.rubyonrails.org/routing。 HTML。您可以随时定义自定义路线,例如'post'/ latest_products'=>'products#latest_create'' – kiddorails

回答

0

我会帮你解决你的问题。 请按照下列步骤操作:

  1. 在routes.rb中创建您的路线:

    get "/create_product" => 'products#create_product', as: :create_product 
    

    ,或者如果你想通过邮寄方式传递PARAMS:

    post "/create_product" => 'products#create_product', as: :create_product 
    
  2. 现在改变你的看法根据新的路线帮手文件:

    form_for (@products, url:{:controller=>'products', :action=>'create_product'}, html:{method:'post'}) 
    
  3. 现在最后一步修改您的控制器:

    def create_product 
    #your form values are avaible here in params variable 
    pp params 
    puts params[:Price] 
    #save your params into ur db 
    end 
    

注:我假设你已经有了product.rb模型