2015-01-16 129 views
1

我有一個Rails應用程序設置爲API,另一個應用程序用於測試API。在測試應用程序中,我希望用戶能夠創建存儲在API中的新的Household對象。現在,當我完成家庭表單並提交時,API中會創建一個新的Household對象,但不包含「名稱」參數。它只是創建一個帶有「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中:

families_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

如果在提交表單時在你的'create'動作中輸出'params [:household]',結果是什麼?我敢打賭,「參數[:家庭]」是零。如果您的表單名稱中出現這種情況,您的字段就像這樣:<%= text_field_tag'household [name]'%>' – 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