gpt4 book ai didi

ruby-on-rails - RoR 允许非模型参数

转载 作者:行者123 更新时间:2023-12-01 08:17:01 24 4
gpt4 key购买 nike

我很难理解如何允许非模型参数。

我读了:

  • Rails Strong Parameters: How to accept both model and non-model attributes?
  • Rails 4 Strong parameters : permit all attributes?
  • Strong Parameters

  • 因此,对于“正常”情况 - 假设我有一个模型 Foo它只有一个属性 bar :
    # foo.rb
    class Foo < ActiveRecord::Base
    # bar, which is a integer
    end

    # views/foos/new.html.erb
    <%= form_for @foo do |f| %>
    <%= f.number_field :bar %>
    <%= f.submit %>
    <% end %>

    #foos_controller.rb
    def create
    @foo = Foo.new(foo_params)
    # ...
    end

    #...

    private

    def foo_params
    params.require(:foo).permit(:bar)
    end

    所以,当我提交表单时, Foo将被创建。

    但是,如果 bar属性背后有一些逻辑,结合了一些非模型参数?假设 bar是两个参数的总和 ( bar = bar_1 + bar_2)。然后 View 和 Controller 看起来像:
    # views/foos/new.html.erb
    <%= form_for @foo do |f| %>
    <%= f.number_field :bar_1 %>
    <%= f.number_field :bar_2 %>
    <%= f.submit %>
    <% end %>

    #foos_controller.rb
    def create
    bar_1 = params[:foo][:bar_1]
    bar_2 = params[:foo][:bar_2]

    if bar_1.present? && bar_2.present?
    @foo = Foo.new
    @foo.bar = bar_1.to_i + bar_2.to_i

    if @foo.save
    # redirect with success message
    else
    # render :new
    end
    else
    # not present
    end
    end

    所以问题是,我是否还需要允许 bar_1bar_2参数?如果我这样做,我该如何允许他们?

    最佳答案

    如果你想访问这两个非模型参数,你必须通过你的 Foo 上的以下代码将它与模型绑定(bind)。模型

    attr_accessor :bar_1, :bar_2

    无需允许它进入
    def foo_params
    params.require(:foo).permit(:bar)
    end

    注意:确保将其从您的 params 中删除。 , 它不会引发任何错误,但会在 rails console 上给你一个警告喜欢 Unpermitted parameters: bar_1, bar_2

    关于ruby-on-rails - RoR 允许非模型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38699372/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com