Rails4 - 在将对象远程保存到数据库之前编辑对象的参数

时间:2014-05-21 19:23:06

标签: ruby-on-rails json ruby-on-rails-4

初学者在这里有一些开发经验。

我有一个有多个型号的应用程序,我已经设法解决所有问题,但我被困在这里。

我有一个名为CartEntries的模型

    class CartEntry < ActiveRecord::Base
    acts_as_paranoid
    belongs_to :cart
    belongs_to :sign

使用Cart Entry控制器中的create方法

    def create
    @entry = @cart.entries.create(entry_params)
    if @entry.save
        flash[:notice] = translate 'flash.notice'
    else
        flash[:error] = translate 'flash.error'
    end
    support_ajax_flashes!
    respond_to do |format|
        format.html # renders view
        format.json { render json: @entry }
    end
end

带有静态符号的模型符号在数据库中输入,没有创建方法。

    class Sign < ActiveRecord::Base
    has_many :cart_entries
    accepts_nested_attributes_for :cart_entries

从Sign的视图中,我初始化CartEntry的新实例,并在点击链接后生成新的购物车条目,生成通知。

    <% @entry = CartEntry.new(sign: @sign)%>
    <%= link_to t('.add_to_cart'), user_cart_entries_path(:entry => @entry.attributes),method: :post, remote: true, "data-type" => :json%>

购物车条目还有另一个名为计数的字段,默认值为1. 我正在寻找一种方法供用户在文本字段中输入此编号并在创建购物车条目时,传递计数用户输入而不是默认值1。 我尝试过什么都传递默认值。 而

   <% @entry = CartEntry.new(sign: @sign, count: 5)%>

技巧是否正确,并将5作为值传递,但我希望用户输入此数字,因为它显然是变量。

虽然我明白了

    <% @entry = CartEntry.new(sign: @sign)%>

在页面加载时初始化输入对象,我必须移动它,我问你善良的人,在哪里?

更新

Entry Params:

    private

    def entry_params
      params.require(:entry).permit(:sign_id, :count)
    end

1 个答案:

答案 0 :(得分:1)

从你的问题中以相反的顺序回答:

  1. 初始化新的CartEntry对象可能应该在控制器的new操作中。 Rails控制器通常同时将newcreatenew绑定到呈现表单以接收输入,create作为与“提交”#39相关联的操作;按钮。您的new操作通常类似于:

    def new
      @entry = CartEntry.new(sign: @sign)
    end
    

    您提醒用户输入数据的视图应命名为new.html.erb并在其中包含该表单。

  2. 为了从表单获取数据到您的创建方法,我认为你已经走了一半。如果您移动了您给出的示例:

    <% @entry = CartEntry.new(sign: @sign, count: 5)%>
    

    到控制器中的create操作,它将是

     @entry = CartEntry.new(sign: @sign, count: params[:count])
     @entry.save
    

    记住&#39; params&#39;只是一个包含表单输入数据的哈希。

  3. 希望有所帮助!