APTCHENT_FU e MULTIPART FORM_FOR
-
20-09-2019 - |
Pergunta
Woo. Minha primeira pergunta.
Tenho a sensação de que estou negligenciando algo bastante básico na construção da minha forma. Estou usando o APPLENT_FU e não consigo fazer com que este formulário passe nada além dos dados do arquivo. Um usuário possui perfis e um perfil Has_Many Documents.
Meu formulário se parece com o seguinte:
<%= error_messages_for :document %>
<% form_for([@user, @profile, @document], :html => {:multipart => true }) do |f| -%>
<p>
<label for="document">Upload A document:</label>
<%= f.file_field :uploaded_data %>
</p>
<%= f.label :description%>
<%= f.text_field :description%>
<p>
<%= submit_tag 'Upload' %>
</p>
<% end -%>
E aqui está o controlador:
before_filter :require_user, :get_profile
def new
@document = @profile.documents.build
end
def create
@document = @profile.documents.build(params[:document])
if @document.save
flash[:notice] = 'Your document was successfully created.'
redirect_to document_url(@document)
else
render :action => :new
end
end
private
def get_profile
@user = current_user
@profile = @user.profiles.find(params[:profile_id])
end
Os logs mostram todos os dados da imagem sendo publicados, mas não posso passar na descrição ou, mais importante, o perfil_id, que é a chave estrangeira no meu modelo de documento. Eu fiquei preso nisso a noite toda e não consigo pensar em nada fresco esta manhã. Qualquer ajuda seria ótimo.
Solução
Para o profile_id
Você precisará de algo como:
<%= f.hidden_field :profile_id %>
Que no seu controlador você receberá usando params[:document][:profile_id]
se necessário. Embora tentasse adivinhar o que seu código está fazendo, suspeito que params[:profile_id]
Já está definido a partir de qualquer rota que você o levasse a este controlador.
Não sei por que você não está vendo nada para a descrição. Deve estar entrando no seu controlador como params[:document][:description]
.