2015-01-16 2 views
1

У меня есть приложение rails, настроенное как API и другое приложение, которое я использую для тестирования API. В тестовом приложении я хочу, чтобы пользователь мог создать новый объект Dom, который хранится в API. Прямо сейчас, когда я заполняю форму домохозяйства и представляю, в API создается новый объект «Хозяин», но параметр «имя» не включается. Он просто создает новую запись только с полями «created_at» и «updated_at». Если кто-нибудь скажет мне, что я делаю неправильно, я был бы признателен. Вот мой код:Использование form_tag для передачи параметров API

В тестовом приложении:

семей/new.html.erb:

<%= form_tag households_path, :method => :post do %> 
Name: <%=text_field_tag :name %><br /> 
<%=submit_tag 'Save' %> 
<%end%> 

households_controller.rb:

def create 
    uri = "#{API_BASE_URL}/households.json" 
    payload = params.to_json 
    rest_resource = RestClient::Resource.new(uri) 
    begin 
    rest_resource.post payload, :content_type => 'application/json' 
    redirect_to households_path 
    rescue Exception => e 
    redirect_to households_path 
    end 
end 

И в API:

домашние хозяйства_controller.rb

def create 
@household = Household.new(params[:household]) 

if @household.save 
    render json: @household, status: :created, location: @household 
else 
    render json: @household.errors, status: :unprocessable_entity 
end 

конец

+0

Если вы выставляете 'params [: hous]' в своем действии 'create', когда вы отправляете форму, что является результатом? Уверен, что 'params [: family]' nil. Если это имеет место в вашей форме, введите ваши поля, как это: '<% = text_field_tag ​​'домашнее хозяйство [имя]'%>' – cristian

+0

Вы проверили параметры, которые были отправлены и получены на обоих концах? – Phil

ответ

2

Для того, чтобы ваше приложение представить правильные PARAMS делать это (смотрите на то, как я назвал вход):

<%= form_tag households_path, :method => :post do %> 
    Name: <%=text_field_tag 'household[name]' %><br /> 
    <%=submit_tag 'Save' %> 
<%end%> 

или вместо form_tag использования form_for

<%= form_for Household.new do |f| %> 
    First name: <%= f.text_field :name %><br /> 
    <%= f.submit 'Save' %> 
<% end %> 

Если вы хотите проверить, что не так с тем, как приложение прямо сейчас, в вашем браузере откройте веб-инспектор и посмотрите, как ваш ввод по имени (это просто имя, а не бытовые [ «имя»], как вы ожидаете его на сервере)

Вы можете проверить его на сервере тоже, делая это:

def create 
    @household = Household.new(params[:household]) 
    puts "params[:household] = #{params[:household]}" # this will be nil 
    puts "params[:name] = #{params[:name]}" #this will display what you have typed inside your input 
    ... 
end 

Чтобы избежать неправильных записей базы данных подтвердите свое семейное положение:

class HouseHold < ActiveRecord::Base 
    validate :name, presence: true 
end 
Смежные вопросы