开发者

Create and edit multiple records of the same model

开发者 https://www.devze.com 2023-03-11 18:12 出处:网络
I\'m quite new to Rails and to this Q&A website! So hello everyone, I\'m a French Rails tester. I have cross posted this question to Railsforum too, to have a better chance on getting an answer :)

I'm quite new to Rails and to this Q&A website! So hello everyone, I'm a French Rails tester. I have cross posted this question to Railsforum too, to have a better chance on getting an answer :) (http://railsforum.com/viewtopic.php?id=44238)

I need help on someth开发者_如何学Pythoning. It seems simple, but in my opinion, not well documented (I browsed the web for 3 days without finding a clean answer. Some partial solutions here, but not a complete and clean one for a newbie!)

I want to add some actions to a default scaffolded controller to handle creation and modification of multiple records in the same form.

rails generate scaffold Item title:string 

This is the sample scaffolded code:

app/controllers/items_controller.rb

class ItemsController < ApplicationController
  # GET /items
  # GET /items.xml
  def index
    @items = Item.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @items }
    end
  end

  # GET /items/1
  # GET /items/1.xml
  def show
    @item = Item.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @item }
    end
  end

  # GET /items/new
  # GET /items/new.xml
  def new
    @item = Item.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @item }
    end
  end

  # GET /items/1/edit
  def edit
    @item = Item.find(params[:id])
  end

  # POST /items
  # POST /items.xml
  def create
    @item = Item.new(params[:item])

    respond_to do |format|
      if @item.save
        format.html { redirect_to(@item, :notice => 'Item was successfully created.') }
        format.xml  { render :xml => @item, :status => :created, :location => @item }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @item.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /items/1
  # PUT /items/1.xml
  def update
    @item = Item.find(params[:id])

    respond_to do |format|
      if @item.update_attributes(params[:item])
        format.html { redirect_to(@item, :notice => 'Item was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @item.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /items/1
  # DELETE /items/1.xml
  def destroy
    @item = Item.find(params[:id])
    @item.destroy

    respond_to do |format|
      format.html { redirect_to(items_url) }
      format.xml  { head :ok }
    end
  end
end

app/views/items/new.html.erb

<h1>New item</h1>

<%= render 'form' %>

<%= link_to 'Back', items_path %>

app/views/items/edit.html.erb

<h1>Editing item</h1>

<%= render 'form' %>

<%= link_to 'Show', @item %> |
<%= link_to 'Back', items_path %>

app/views/items/_form.html.erb

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

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

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

In my opinion, I need to add 4 methods to my Item controller:

  • new_multiple : to initialize the new multiple form view
  • create_multiple : to handle results from the new multiple form view
  • edit_mulitple : to initialize the edit multiple form view
  • update_mulitple : to handle results from the edit multiple form view

Then, I need to create 2 new views:

  • new_multiple.html.erb with code for a multiple record (5 in the same time) creation form
  • edit_mulitple.html.erb with code for a multiple record (5 in the same time) edition form
  • and maybe _partials to avoid DRY stuff...

Anyone want to help me write these 4 actions and 2 views? I would really appreciate that.

Thanks! :)

Note : In my application items are children of parentItems but I DON'T WANT to use nested_form to create items in parentItems forms like in railscast 196 and 197.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号