2012-02-20 3 views
2

Когда я отправляю форму, данные не отправляются в сообщении и не устанавливаются через параметры. Почему я не могу понять, почему. Эта форма находится в действии plan/show, поэтому вы видите, что я устанавливаю переменную @action. Он отправляется через JS.Данные формы не отправляются в параметрах через POST

routes.rb

resources :plans do 
    resources :actions 
end 

action.rb

belongs_to :plan 

plan.rb

has_many :actions 

plans_controller.rb

def show 
    @plan = current_user.plans.includes(:actions).find(params[:id]) 
    @action = Action.new 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @plan } 
    end 
end 

actions_controller.rb

before_filter :get_plan  

def create 
    @action = @plan.actions.new(params[:action]) 
    @action.user_id = current_user.id 
    @action.save 
end 

private 

def get_plan 
    @plan = current_user.plans.find(params[:plan_id]) 
end 

create.js.erb в представлениях/папку действия

$('div#actions').prepend("<%= escape_javascript(render @action) %>"); 
$('div#<%= dom_id(@action) %>').effect('highlight'); 

_form.html.erb частичный

<%= form_for ([@plan, @action]), remote: true do |f| %> 
    <%= f.text_field :desc %> 
    <%= f.number_field :days %> 
    <%= f.submit %> 
<% end %> 

параметры, отправляемые с помощью POST (отсутствует действие хэш - почему ??)

Started POST "/plans/1/actions" 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"**removed**", "commit"=>"Create Action", "plan_id"=>"1"} 

DB Schema

create_table "plans", :force => true do |t| 
    t.string "name" 
    t.integer "user_id" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
end 

create_table "actions", :force => true do |t| 
    t.string "desc" 
    t.integer "plan_id" 
    t.integer "days" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
end 
+0

сгенерированный источник был бы интересным. в случае, если это сгенерировано с помощью ajax (например, create.js.erb), последнего состояния перед отправкой формы. Также это может помочь, если это только проблема в определенном браузере (что вы проверили?) –

ответ

2

Действие является зарезервированным словом. Если вы называете это чем-то другим (кроме контроллера, который также зарезервирован), то он будет работать.

http://guides.rubyonrails.org/action_controller_overview.html#routing-parameters

PARAMS хэш всегда будет содержать: ключи действий, но вы должны использовать методы controller_name и action_name вместо того, чтобы получить доступ к этим значения: контроллер и.

+0

Damnit! Спасибо что подметил это. – Steve

+0

@Steve Вы можете взломать и сохранить свою модель как «Действие», однако вам будет намного легче, если вы назовете это чем-то другим, если это возможно. – Gazler

+0

Я прототипирую, поэтому я, вероятно, просто начну с этой конкретной функции, так как это ранняя итерация. Рад, что я знаю это сейчас! – Steve

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