2016-05-26 1 views
0

я иметь такую ​​форму:Передачи данных, которые пользователи не могут изменить от формы к контроллеру

<%= 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

Как вы получаете объект результата? – Thorin

+0

@Thorin 'result' - это OpenStruct из внешнего API – Olivia

+0

Я просил, чтобы это было так, потому что эти значения находятся в скрытых полях, тогда вы можете сохранить эти значения в контроллере непосредственно в методе создания или обновления, не нужно передавать в hiddens, если вы можете называть их api on create method – Thorin

ответ

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 %> 
+0

Опция readonly имеет такое же ограничение, что и скрытое поле, - в некоторых браузерах пользователь может проверять и изменять свойство –

0

Я передал идентификатор книги в скрытом поле, а затем просмотрел все остальные атрибуты книги в контроллере.

<%= form_for(@book) do |f| %> 
    <%= f.text_area 'review' %> 
    <%= hidden_field_tag "book[id]", result.id %> 
    <%= f.submit "Add book" %> 
<% end %> 

Если вы обеспокоены тем, пользователь по-прежнему быть в состоянии изменить идентификатор книги в скрытом поле, вы можете выполнить проверку в контроллере, чтобы увидеть, если пользователь имеет право ввести обзор книгу с представленным идентификатором.

Смежные вопросы