2009-06-05 20 views
11

Tôi mới dùng ruby ​​trên đường ray và đang làm việc với phiên bản 2.3 trên mac osx. Tôi đang cố gắng tạo ra cùng một chức năng mà một giàn giáo tạo ra, nhưng theo cách riêng của tôi. tôi đã tạo bộ điều khiển, chế độ xem và mô hình "bài đăng". trong bài điều khiển, tôi đã điều sau đây:biến thể hiện so với ký hiệu trong ruby ​​trên đường ray (form_for)

class PostController < ApplicationController 
    def index 
    end 

    def new 
    @post = Post.new 
    end 
end 

trong new.html.erb, tôi đã điều sau đây:

<h1>New Post</h1> 

<% form_for :post do |f| %> 

    <%= f.text_field :title %> 

<% end %> 

tôi nhận thấy rằng trong đoạn đầu đài mã được tạo ra, việc sử dụng các instance variable @post cho trình trợ giúp form_for. tại sao họ sử dụng biến thể hiện trong hình thức tạo ra giàn giáo nếu đi qua biểu tượng: đăng trong form_for không chính xác điều tương tự, trong khi một biểu tượng đòi hỏi phải thay đổi cấu hình của các tuyến đường?

thank you very much, Yuval

Trả lời

15

nếu bạn sử dụng biểu tượng: gửi nó tạo ra

<form action="/posts" method="post"> 

nếu bạn sử dụng các ví dụ @post

cho @post = Post.new bạn sẽ nhận được

<form action="/posts/create" class="new_account" id="new_account" method="post"> 

cho @post = Post.find (1) bạn sẽ nhận được

<form action="/posts/update" class="edit_account" id="edit_account_1" method="post"> 
<input name="_method" type="hidden" value="put"> 

nếu bạn có các biểu mẫu khác nhau cho bản mới và bản chỉnh sửa của bạn không có vấn đề gì lớn nhưng không giống với bản mới và các chỉnh sửa của bạn sẽ giống hệt nhau hoặc gần với nó

vì vậy nếu bạn sử dụng biến mẫu @post bạn có thể đặt tất cả các mẫu mã vào _form và chỉ cần gọi một phần và nó sẽ xử lý phần còn lại dựa trên nếu bạn vượt qua trong một kỷ lục mới hoặc một hồ sơ hiện có

+0

cảm ơn bạn rất nhiều. Điều đó làm cho nó rõ ràng :) –

+3

tầm quan trọng của _method ẩn đó là các trình duyệt không hỗ trợ các phương thức put và delete, do đó bạn phải cho ứng dụng biết khi một phương thức post có nghĩa là đặt hoặc xóa, các đường ray may mắn xử lý một cách kỳ diệu điều này cho chúng tôi – ErsatzRyan

+0

Bạn cần sử dụng @post trên biểu mẫu mới và bạn cần nó ngay cả khi biểu mẫu của bạn là riêng biệt. Nếu không, khi bạn tạo một bài đăng mới có dữ liệu không hợp lệ và nó sẽ quay trở lại biểu mẫu mới có lỗi xác thực, nó sẽ không điền vào thông tin bạn đã nhập. –

0

Một lý do có thể là nó làm cho mã cho form để tạo một bài mới hơn tương tự như mã cho một hình thức để cập nhật một bài hiện có.

+0

cảm ơn bạn đã trả lời của bạn –

Các vấn đề liên quan