2015-12-28 4 views
0

Я ранее работал над Spring MVC в основном так думал о понимании ROR для изменения.Ruby On Rails: представление о представлении формы

Я шел, хотя учебники по CodeAcademy, где я немного смутился следующим механизмом представления формы.

Итак, вот образец формы.

<%= form_for(@message) do |f| %> 
    <div class="field"> 
    <%= f.label :message %><br> 
    <%= f.text_area :content %> 
    </div> 
    <div class="actions"> 
    <%= f.submit "Create" %> 
    </div> 
<% end %> 

Соответствующий обработчик действия в контроллере выглядит следующим образом:

def create 
@message = Message.new(message_params) 
if @message.save 
    redirect_to '/messages' 
else 
    render 'new' 
end 
end 

private 
def message_params 
    params.require(:message).permit(:content) 
end 

Я смущен следующей строке params.require(:message).permit(:content) Поскольку :message является поле метки, оно всегда должно иметь значение. Таким образом, .required(:message) всегда должен быть true, и метод message_params должен всегда возвращать значение текстового поля. Верный?

Я не уверен, полностью ли я это понимаю. Может кто-нибудь объяснить это немного ясно.

+0

Это связано с сильными параметрами: http://blog.trackets.com/2013/08/17/strong-parameters-by-example.html –

ответ

0

message - это всего лишь метка поля content.

require(:message) - это параметр хэша вашей формы и permit(:content) - ваш разрешенный параметр content. Так что ваш хэш-параметр может выглядеть следующим образом:

{ 
    message: { 
    content: "Your content here..." 
    } 
} 

Эта техника называется «Strong Parameters».

+0

Чтобы уточнить, предположим, что мне нужно передать еще 1 поле ввода Скажем, имя, мне нужно использовать для этого еще один параметр хэша? просто как сообщение ??? – AgentX

+0

Если вы добавляете, например, 'name' к хэшу, то единственное, что вам нужно сделать, это добавить это в ваш запрос' allow'. Более подробную информацию об этом вы найдете в документах. Но если вы просто хотите напрямую отправить параметр 'name', вы можете получить к нему доступ напрямую, вызвав' params [: name] '. Btw вы также можете получить вложенные параметры напрямую, например, вызовив 'params [: message] [: content]'. – Tobias

+0

Спасибо, человек, я проверю документы для получения дополнительной информации !! – AgentX