【问题标题】:Trying to call this method in my view and pass the input to the method argument尝试在我的视图中调用此方法并将输入传递给方法参数
【发布时间】:2015-03-30 10:40:16
【问题描述】:

这是我在用户控制器中的方法:

  def donation_custom(amount)
   @user = current_user
   @user.amount_donated += amount
   @user.save
   redirect_to root_path, :alert => "thanks for donating" 
  end

我只需要一个简单的输入表单,这样我就可以调用此方法并将用户输入传递给我的“金额”参数。

提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby methods view simple-form


    【解决方案1】:

    为什么不坚持使用 RESTful 方式来做这件事呢?在你的 User 模型中创建一个自定义的 setter 方法:

    validates :add_amount, numericality: {greater_than_or_equal_to: 0}
    
    def add_amount=(value)
      self.amount_donated += value
    end
    

    然后创建一个简单的表单来捕获它:

    <%= form_for @user do |f| %>
      Amount to donate <%= f.text_field :add_amount %><br>
      <%= f.submit "Donate!" %>
    <% end %>
    

    然后使用您的UsersController#update 方法进行设置:

    def update
      @user = User.find(params[:id])
      # you'll probably want to add some error checking here
      @user.update_attributes(user_params)
      redirect_to root_path, notice: "Thanks for donating!"
    end
    
    private
    
    def user_params
      # you'll probably want to whitelist other parameters here
      params.require(:user).permit(:add_amount)
    end
    

    【讨论】:

      【解决方案2】:

      我不建议将此作为解决此问题的一般方法,并且我没有指出您的代码中的其他问题,但是您的要求非常具体,以至于您显然只是在寻找特定的解决方案对于这个问题,所以...

      从方法签名中删除 args,所有表单参数都以名为 params 的散列形式呈现给控制器,因此您的方法应变为:

      def donation_custom
        @user = current_user
        @user.amount_donated += params[:amount]
        @user.save
        redirect_to root_path, :alert => "thanks for donating" 
      end
      

      然后在你看来,你会得到这样的东西:

      <%= form_tag '/your_controller/donation_custom' do -%>
        <div><%= text_field_tag :amount %></div>
        <div><%= submit_tag 'Save' %></div>
      <% end -%>
      

      【讨论】:

        【解决方案3】:

        form_for 助手接受一个名为 url 的参数,在这里您应该使用该控制器的路由助手 donate_custom_path,然后不要这样做

        @user.amount_donated = amount
        

        你会的

        @user.amount_donated = params[:amount]
        

        然后您将donation_custom 保留为0 个参数

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-24
          • 2014-09-13
          • 1970-01-01
          • 1970-01-01
          • 2011-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多