我有这样的表格:
<%= form_for(@book) do |f| %>
<%= f.text_area 'review' %>
<%= hidden_field_tag "book[title]", result.title %>
<%= hidden_field_tag "book[author]", result.author %>
<%= hidden_field_tag "book[pages]", result.pages %>
<%= f.submit "Add book" %>
<% end %>
在books_controller中,我有一个create
动作来添加一本书。
我不希望用户能够更改图书的标题,作者或页面。我想要用户输入的唯一内容就是审核。
我知道hidden_field_tags很容易被篡改 - 可以通过检查代码和更改值在浏览器(如Chrome或Firefox)中更改它们。这将导致用户能够更改数据。
如果用户无法更改数据,如何将数据传递给控制器的create
操作?
答案 0 :(得分:0)
您可以将text_field_tag
与readonly: true
选项一起使用。
<%= form_for(@book) do |f| %>
<%= f.text_area 'review' %>
<%= text_field_tag "book[title]", result.title, readonly: true %>
<%= text_field_tag "book[author]", result.author, readonly: true %>
<%= text_field_tag "book[pages]", result.pages, readonly: true %>
<%= f.submit "Add book" %>
<% end %>
答案 1 :(得分:0)
我会在隐藏字段中传递书籍ID,然后在控制器中查找所有其他书籍属性。
<%= form_for(@book) do |f| %>
<%= f.text_area 'review' %>
<%= hidden_field_tag "book[id]", result.id %>
<%= f.submit "Add book" %>
<% end %>
如果您担心用户仍然可以在隐藏字段中更改图书的ID,您可以在控制器中执行检查以查看用户是否有权使用ID输入对图书的评论提交。