【问题标题】:Rails4 - Edit parameters of an Object before remotely saving it in the databaseRails4 - 在将对象远程保存到数据库之前编辑对象的参数
【发布时间】:2014-05-21 19:23:06
【问题描述】:

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

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

我有一个模型,叫做 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 的新实例,并在单击链接后成功创建了一个新的 Cart Entry,生成了通知。

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

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

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

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

虽然我理解

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

在页面加载时初始化入口对象,我必须移动它,我问你好心人,在哪里?

更新

输入参数:

    private

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

【问题讨论】:

  • 请添加entry_params方法的实现

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


【解决方案1】:

按照与您的问题相反的顺序回答:

  1. 初始化新的 CartEntry 对象可能应该在控制器的 new 操作中。 Rails 控制器通常同时具有newcreatenew 与呈现表单以接收输入相关联,create 与“提交”按钮相关联。您的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
    

    记住'params'只是一个包含表单输入数据的哈希。

希望有帮助!

【讨论】:

    猜你喜欢
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多