2015-03-21 2 views
0

Итак, я пытаюсь обновить вложенный объект, но почему-то родительский контроллер apps_params не удовлетворен, потому что app не получает его. Взгляните ниже, и дайте мне знать, если я буду писать больше кода.Rails 4: передача идентификатора родителя для вложенных атрибутов при обновлении

ошибка

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

Started PUT "/apps/1" for 127.0.0.1 at 2015-03-21 14:00:12 -0500 
Processing by AppsController#update as JSON 
    Parameters: {"authenticity_token"=>"0Z/SxhhEO6OA6eiShd+1PZI0DQ9QK1I7G8wqoInz+vM=", "@app"=>{"element"=>{"@app"=>{"el 
ent.name"=>"hgfd"}}}, "id"=>"1"} 
    App Load (1.0ms) SELECT "apps".* FROM "apps" WHERE "apps"."id" = ? LIMIT 1 [["id", 1]] 
Completed 400 Bad Request in 2ms 

ActionController::ParameterMissing (param is missing or the value is empty: app): 
    app/controllers/apps_controller.rb:73:in `app_params' 
    app/controllers/apps_controller.rb:45:in `block in update' 
    app/controllers/apps_controller.rb:44:in `update' 

ссылочного линии в моем apps_controller.rb:

def update 
    respond_to do |format| 
     if @app.update(app_params) 
     format.html { redirect_to @app, notice: 'App was successfully updated.' } 
     format.json { render :show, status: :ok, location: @app } 
     else 
     format.html { render :edit } 
     format.json { render json: @app.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

private 
def app_params 
    params.require(:app).permit(:name, :infivewords, :description, elements_attributes: [:name, :description]) 
end 

Мои Apps Показать View:

<% @app.elements.each do |element| %> 
    <tr> 
     <td>  
       <span class="rest-in-place" data-url="<%= url_for @app %>" data-object="@app[element]" data-attribute="@app[element.name]" data-placeholder="Enter description"> 
       <%= element.name %> 
     </td> 
     <td><h2><%= element.description %></h2></td> 

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

Любая помощь приветствуется. Спасибо.

EDIT: Я должен добавить, что на моих маршрутах у меня есть два отдельных блока ресурсов. Один, где элементы находятся внутри приложений, а другой - внутри элементов. Я отправлю код, как только вернусь к своему столу.

EDIT2 - App Форма выпуска:

<%= form_for(@app) do |f| %> 
    <% if @app.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@app.errors.count, "error") %> prohibited this app from being saved:</h2> 

     <ul> 
     <% @app.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :infivewords %><br> 
    <%= f.text_field :infivewords %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 
+1

Можете ли вы добавить свою форму? Params «@app» выглядит подозрительно, может быть, должно быть «приложение»? – messanjah

+0

@messanjah будет делать, как только я вернусь к своему столу через несколько минут, мужик. Спасибо за быстрый ответ. На какой «@app» вы ссылаетесь? Внутри блока просмотра? Я в значительной степени пробовал все внутри этого блока и получал либо одну и ту же ошибку, либо не обновлял и не делал ошибок, но я попробую это снова и опубликую ответ консоли и браузера. – Nickdb93

+1

Ключ «@app» в хэше параметров. 'app_params' требует«: app », но похоже, что отправляется« @app ». – messanjah

ответ

1

Я незнаком с rest_in_place, но я бы перепроверить ваши данные атрибуты этой линии

<span class="rest-in-place" data-url="<%= url_for @app %>" data-object="@app[element]" data-attribute="@app[element.name]" data-placeholder="Enter description"> 

Может быть что-то больше похоже на

<span class="rest-in-place" data-url="<%= url_for @app %>" data-object="app[elements]" data-attribute="name" data-placeholder="Enter description"> 
+0

Согласен, я только что обновил свое шоу, чтобы отразить ваши предложения. Однако консоль бросает мне следующую ошибку: «ActiveRecord :: UnknownAttributeError (неизвестный атрибут: элемент): app/controllers/apps_controller.rb: 45: в блоке в обновлении app/controllers/apps_controller.rb: 44 : in 'update'' – Nickdb93

+1

Возможно, множественная форма' app [elements] '? – messanjah

+0

Я тоже пробовал это, и он возвращает следующую ошибку: 'ActiveRecord :: AssociationTypeMismatch (Element (# 39712560) ожидается, получил Array (# 3437496)): app/controllers/apps_controller.rb: 45: в блоке в обновлении 'app/controllers/apps_controller.rb: 44: in update'' – Nickdb93

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