传递用户无法从表单更改为控制器的数据

时间:2016-05-26 15:59:42

标签: ruby-on-rails forms

我有这样的表格:

<%= 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操作?

2 个答案:

答案 0 :(得分:0)

您可以将text_field_tagreadonly: 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输入对图书的评论提交。