@product
trong các tàu hỗ trợ form_for
có nhiều tính năng hơn.
:product
chỉ ảnh hưởng đến id và tên của trường nhập. Ví dụ bạn có một văn bản nộp theo hình thức:
<%= form_for :product, :url => {...} do |f| %>
<%= f.text_field :price %>
<% end %>
Các html tạo ra sẽ như thế nào:
<input type="text" id="product_price" name="product[price]" />
Giá trị id
và name
được xác định bởi :product.to_s
và tên trường văn bản.
Trong khi nếu bạn sử dụng @product
, các :url
là không cần thiết vì các url sẽ được xác định theo công 's @product
status:
- nếu
@product
là một kỷ lục mới, url sẽ gửi đến create
- nếu không, url sẽ gửi đến
update
và đầu vào đệ của id và tên bị ảnh hưởng bởi @product
's cl tên ass, vì vậy điều quan trọng là khi bạn đang sử dụng bảng kế thừa đơn. Giá trị của dữ liệu đầu vào được tự động gán với giá trị thuộc tính của @product
.Vì vậy, nếu bạn sử dụng @product
, sản lượng html sẽ trông như thế:
<input type="text" id="product_price" name="product[price]" value="some value" />
Giả sử tên lớp 's @product
là Item
, sau đó đầu ra sẽ thay đổi để:
<input type="text" id="item_price" name="item[price]" value="some value" />
Và dĩ nhiên bạn có thể sử dụng cả hai :product
và @product
:
<%= form_for :product, @product do |f| %>
các :product
điều khiển đầu vào đệ của tên và id, và @product
kiểm soát giá trị của trường và giá trị của trường nhập.
: sản phẩm cũng ảnh hưởng đến URL mà 'form_for' tạo ra. –
Vâng, nhưng tôi không bao giờ sử dụng đối số biểu tượng mà không chỉ định ': url'. Trên thực tế, biểu tượng hiếm khi được sử dụng một mình. – Kevin
Khi tôi sử dụng 'form_for (: sản phẩm, ...)' Tôi thấy các trường văn bản được điền bằng các giá trị '@ product'. Tuy nhiên, các hộp chọn sẽ nhận giá trị mặc định (tùy chọn đầu tiên). Bạn có bất cứ ý tưởng gì có thể sai? Xem thêm tại đây: http://stackoverflow.com/questions/4436267/ruby-on-rails-why-a-select-box-does-not-show-the-current-object-value –