尝试在我的视图中调用此方法并将输入传递给method参数

时间:2015-01-30 21:07:19

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

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

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

我只需要在我的视图中使用一个简单的输入表单,这样我就可以调用此方法并将用户输入传递给我的" amount"参数。

提前感谢!

3 个答案:

答案 0 :(得分:1)

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

从方法签名中删除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 -%>

答案 1 :(得分:1)

为什么不坚持使用RESTful方式做到这一点?在用户模型中创建自定义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 :(得分:0)

form_for帮助器接受一个名为 url 的参数,在这里你应该使用该控制器的路径助手 donate_custom_path 然后而不是

@user.amount_donated = amount

你做

@user.amount_donated = params[:amount]

你将donation_custom留下0参数