2014-12-31 28 views
0

我試圖做類似於通過ajax添加評論到博客文章,但我努力讓它工作。在我的項目中,用戶可以有許多活動,每個活動可以有很多項目。更新頁面與表單提交 - 嵌套路由

路由如下:

resources :users do 
    resources :activities do 
    resources :items 
    end 
end 

ActivitiesController.rb

#rest of code 

def show 
    @activity = Activity.find(params[:id]) 
    @new_item = @activity.items.build 
    @items = @activity.items.all.order('id DESC') 
end 

ItemsController.rb

#rest of code 
def create 

    @activity = Activity.find(params[:activity_id]) 

    @item = @activity.items.new(item_params) 
    respond_to do |format| 
    if @item.save 
     format.html {redirect_to user_activity_path(@activity.user_id, @activity)} 
     format.js 
    else 
     format.html {redirect_to :back} 
    end 
    end 
end 

一個ctivities/show.html.erb

<div class="row"> 

    <div class="large-6 large-offset-3 columns"> 

    <%= simple_form_for [@activity, @new_item], url: user_activity_items_path(@activity.user_id, @activity), remote: true do |f| %> 

    <%= f.input :name, required: false, :wrapper_html => { class: 'large-8 columns name' } %> 
    <%= f.input :cost, required: false, :wrapper_html => { class: 'large-4 columns cost' } %> 

    <%= f.submit "Add Item", class: 'large-4 columns button' %> 
    <% end %> 

    </div> 
</div> 

<div class="row"> 

    <div class="large-6 large-offset-3 columns item-list"> 

    <table> 
     <thead> 
     <tr> 
      <th>Name</th> 
      <th>Cost</th> 
     </tr> 
     </thead> 
     <tbody> 
     <% @items.each do |item| %> 
     <%= render 'item', item: item %> 
     <% end %> 
     </tbody> 
    </table> 

    </div> 
</div> 

活動/ _item.html.erb

<tr> 
    <td><%= item.name %></td> 
    <td><%= item.cost %></td> 
</tr> 

項目/ create.js.erb

#currently empty 
+0

使用out ajax獲取存儲所有數據的正確性嗎? – SSR

+0

不確定你的意思?如果你問是否沒有Ajax的工作,答案是肯定的 – Robbo

+0

你有沒有使用rails ujs? – SSR

回答

0

你創造。 js.erb應該看起來像

$("#getItems").last('tr').after('<%= escape_javascript(render partial: "activities/item", :locals => { :item => @item })) %>'); 

並在顯示頁面上將其替換爲我的。

<div class="row"> 
    <div class="large-6 large-offset-3 columns item-list"> 
    <table> 
     <thead> 
     <tr> 
      <th>Name</th> 
      <th>Cost</th> 
     </tr> 
     </thead> 
     <tbody id="getItems"> 
     <% @items.each do |item| %> 
     <%= render 'item', item: item %> 
     <% end %> 
     </tbody> 
    </table> 
    </div> 
</div> 
+0

謝謝@SSR,我從_item.html.erb部分 – Robbo

+0

得到'item'上的一個未定義的局部變量錯誤。請檢查我在create.js.erb文件中的更新並將其替換爲新的。 – SSR

+0

是的工作歡呼,非常感謝 – Robbo