Rails 4如何在同一页面中创建和列出

时间:2013-09-04 11:19:23

标签: ruby-on-rails-4

我有一个模型产品,我想在text_field

下创建然后列出

在我的控制器中

class ProductController < ApplicationController
def buy
    @product = Product.new(product_params)

        respond_to do |format|
            if @product.save
                format.html { redirect_to @product, notice: 'Product was successfully added.'}
            else
                format.html { redirect_to @product, notice: 'Failed to added.'}
            end
        end
    end

    private

    def product_params
        params.permit(:name, :description)
    end

并查看

<%= simple_form_for @product, :url => { :controller => 'product', :action => 'buy'} do |f| %>
<%= f.input :name %>
<%= f.input :description %>
<%= f.button :label => 'BUY', :class => 'btn add-product btn-primary' %>

<% end %>

我尝试在同一视图中列出

        <% @products.each do |product| %>
        <%= product.name %>
        <%= product.description %>

和脚本

<script>
 $('.add-product').click(function(){
  $('.product').clone().first().appendTo('.container');
 })

我不确定代码是否可以运行 因为我遇到了问题

NilClass的未定义方法`model_name':Class

在此&lt;%= simple_form_for @product中,:url =&gt; {:controller =&gt; 'product',:action =&gt; '买'}做| f | %GT;

我的问题就像Append form partial in the new view of the same model in rails 但我不能使用%input {:name =&gt; “model [] [name]”}是我的输入

可以帮助我修复代码  感谢〜

1 个答案:

答案 0 :(得分:1)

@pruduct是一个错字。把它@product。那解决了吗?

基于评论。

class ProductController < ApplicationController 

  def index
    @products = Product.all 
    @product = Produc.new
  end 

  def buy
    @product = Product.new(product_params)
    respond_to do |format|
      if @product.save
        format.html { redirect_to products_path, notice: 'Product was successfully added.'}
      else
        format.html  do
          @products = Product.all
          flash.now[:error] = 'Failed to add product'
          render action: 'index'
        end
      end
    end
  end
end

必须更改重定向失败,因为如果它没有保存,您将没有ID,并且无法重定向到它。

然后在index.html.erb视图中

<%= simple_form_for @product, :url => { :controller => 'product', :action => 'buy'} do |f| %>
  <%= f.input :name %>
  <%= f.input :description %>
  <%= f.button :label => 'BUY', :class => 'btn add-product btn-primary' %>
<% end %>

<% @products.each do |product| %>
  <%= product.name %>
  <%= product.description %>
<% end %>

我认为应该按照你的要求做。