【发布时间】:2017-09-30 15:58:20
【问题描述】:
让button_to 在 Rails 中按照我想要的方式工作,我感到很惊讶。我在用户展示页面 (localhost:3000/users/1)。我想从那里create 一个可用性(availability_controller.rb)。我在可用性控制器中有一个create 方法。
这是可用性控制器:
def create
@availability = current_user.availability.build(available_on: Date.today, available_hour: params[:available_hour])
if @availability.save
flash[:notice] = "New availability added!"
redirect_to current_user
else
flash[:error] = "Error adding availability"
redirect_to current_user
end
end
它接受一个参数,available_hour。
幸运的是,我能够使用form 方法创建一个表单来执行我需要的操作:
<form method="post" action="/availability">
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
<button name="available_hour" value=0 type="submit" class="nowhere-block">Add Availability</button>
</form>
每当用户单击按钮时,我将值 0 硬编码为发送到可用性创建方法。这很好用,我可能可以继续生活。
但是,我认为上面的代码有点冗长,我想用button_to 实现同样的效果。我查看了button_to docs,但找不到我正在寻找的信息。
我尝试了<%= button_to "Post Availability", @availability, { available_hour: 5 } %>,但它给了我No route matches [POST] "/users/1" 错误。不知何故,它仍在访问用户路径。
我也尝试过其他组合,但均未成功:
<%= button_to "Post Availability", availability_path, {controller: "availability", available_hour: 5 } %>
<%= button_to "Post Availability", @availability, remote: true, class: "nowhere-block" %>
如何从用户显示内部访问可用性控制器的创建方法?
更新: 当前路线.rb:
devise_for :users
resources :users
resources :friendships
resources :availability
root to: "users#index"
availability_index GET /availability(.:format) availability#index
POST /availability(.:format) availability#create
new_availability GET /availability/new(.:format) availability#new
edit_availability GET /availability/:id/edit(.:format) availability#edit
availability GET /availability/:id(.:format) availability#show
PATCH /availability/:id(.:format) availability#update
PUT /availability/:id(.:format) availability#update
DELETE /availability/:id(.:format) availability#destroy
【问题讨论】:
-
您是否尝试将参数放在您想要的路径中:
button_to "Post Availability", availability_path(available_hour: 5)? -
你是在 config/route.rb 中添加资源路由吗? availability_path 是从 route.rb 文件派生的辅助方法。
-
@ScottMonceaux,我更新了我的帖子以显示路线。据我所知,我有
resources :availability包括在内。 Raphael,我在尝试时遇到了No route matches [POST] "/availability/1"错误。 -
你能运行 rake 路由并发布结果吗?我怀疑这与它不是复数的事实有关。对于微笑和笑容,还可以尝试将资源更改为可用资源,并让我们知道您得到了什么。
-
@ScottMonceaux 我更新了我的帖子。抱歉,我不确定第二个 - 你介意详细说明更改
resources to resources for availability吗?
标签: ruby-on-rails