form_for nhưng để đăng lên một hành động khác


122

Tôi muốn có một form_for @user, nhưng đăng lên một hành động tùy chỉnh trong bộ điều khiển người dùng.

Tôi có thể làm cái này như thế nào?

Câu trả lời:


177
form_for @user, :url => url_for(:controller => 'mycontroller', :action => 'myaction')

hoặc là

form_for @user, :url => whatever_path

15
Tôi không nghĩ url_forlà cần thiết. Ngoài ra vì bộ điều khiển là như nhau, bạn có thể sử dụngform_for @user, :url => :action => 'myaction'
rubyprince

1
Câu trả lời trên rất hữu ích nhưng tôi phải điều chỉnh nó một chút vì nếu không thì POST luôn định tuyến đến hành động của bộ điều khiển chỉnh sửa nếu không: <% = form_for (@user, url: {action: "myaction"}, phương thức :: post) | user_form | %>. Xin lưu ý rằng đây là một tệp xem trong thư mục lượt xem / người dùng / thư mục.
AarCee

42

Các công việc sau đây cho tôi:

form_for @user, :url => {:action => "YourActionName"}

1
Những công việc này. Kiểm tra nó trong các tài liệu chính thức bằng cách tìm kiếm action:( dấu hai chấm hành động ) api.rubyonrails.org/groupes/ActionView/Helpers/ trộm
user664833

3
Hmm không chắc chắn. Tôi đã đặt form_for @user, url: {action: 'myaction'}nhưng nó cho tôi No route matches {:action=>"myaction", :controller=>"users"}lỗi.
lulalala

@lulalala, tất nhiên, bạn cũng phải đặt tuyến đường. trong trường hợp này, như:resources :users do collection do get :myaction end end
nghĩa taga

11

Tôi đã làm nó như thế

<%= form_for :user, url: {action: "update", params: {id: @user.id}} do |f| %>

Lưu ý tham số tùy chọn idđược đặt thành thuộc tính id của người dùng.


4

Ngoài ra, có thể đạt được điều tương tự bằng form_tagcú pháp:

form_tag({controller: "people", action: "search"}, method: "get", class: "nifty_form")
# => '<form accept-charset="UTF-8" action="/people/search" method="get" class="nifty_form">'

Như được mô tả trong http://guides.rubyonrails.org/form_helpers.html#multipl-hashes-in-form-helper-calls


Điều này đúng, nhưng câu hỏi yêu cầu về một đối tượng cụ thể - trong trường hợp này @user. Sử dụng form_tagsẽ không liên kết các thuộc tính của đối tượng với các trường biểu mẫu.
Dylan Pierce

3

Nếu bạn muốn chuyển Bộ điều khiển tùy chỉnh cho form_for trong khi hiển thị một phần của biểu mẫu, bạn có thể sử dụng điều này:

<%= render 'form', :locals => {:controller => 'my_controller', :action => 'my_action'}%>

và sau đó ở dạng một phần sử dụng biến cục bộ như thế này:

<%= form_for(:post, :url => url_for(:controller => locals[:controller], :action => locals[:action]), html: {class: ""} ) do |f| -%>

3

cú pháp mới

<%= form_for :user, url: custom_user_path, method: :post do |f|%>
<%end%>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.