尝试在我的视图中调用此方法并将输入传递给方法参数
Trying to call this method in my view and pass the input to the method argument
这是我在用户控制器中的方法:
def donation_custom(amount)
@user = current_user
@user.amount_donated += amount
@user.save
redirect_to root_path, :alert => "thanks for donating"
end
我只需要一个简单的输入表单,这样我就可以调用此方法并将用户输入传递给我的 "amount" 参数。
提前致谢!
form_for 助手接受一个名为 url 的参数,在这里您应该使用该控制器的路由助手 donate_custom_path 而不是
@user.amount_donated = amount
你做
@user.amount_donated = params[:amount]
并且您将 donation_custom 保留为 0 个参数
我不建议将此作为解决此问题的一般方法,并且您的代码中还有其他我没有指出的问题,但您的要求非常具体,您显然只是在寻找一个这个问题的具体解决办法,所以...
从方法签名中删除 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 -%>
为什么不坚持使用 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
这是我在用户控制器中的方法:
def donation_custom(amount)
@user = current_user
@user.amount_donated += amount
@user.save
redirect_to root_path, :alert => "thanks for donating"
end
我只需要一个简单的输入表单,这样我就可以调用此方法并将用户输入传递给我的 "amount" 参数。
提前致谢!
form_for 助手接受一个名为 url 的参数,在这里您应该使用该控制器的路由助手 donate_custom_path 而不是
@user.amount_donated = amount
你做
@user.amount_donated = params[:amount]
并且您将 donation_custom 保留为 0 个参数
我不建议将此作为解决此问题的一般方法,并且您的代码中还有其他我没有指出的问题,但您的要求非常具体,您显然只是在寻找一个这个问题的具体解决办法,所以...
从方法签名中删除 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 -%>
为什么不坚持使用 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