On Sunday, December 1, 2019 at 11:04:01 PM UTC-5, Walter Lee Davis wrote: > > > > > On Dec 1, 2019, at 10:17 PM, fugee ohu <fuge...@gmail.com <javascript:>> > wrote: > > > > A generic scaffold posts to the create action PATCH and PUT according to > you in this discussion POST to update Even still new is fetched by GET > where new.html.erb renders _form.html.erb > > > > > > I'm not sure if you're confused about what I wrote, or just confused. Here > are the actual actions that a generic Rails 6 scaffold generates and > responds to. Read the comments before each method: > > class FoosController < ApplicationController > before_action :set_foo, only: [:show, :edit, :update, :destroy] > > # GET /foos > # GET /foos.json > def index > @foos = Foo.all > end > > # GET /foos/1 > # GET /foos/1.json > def show > end > > # GET /foos/new > def new > @foo = Foo.new > end > > # GET /foos/1/edit > def edit > end > > # POST /foos > # POST /foos.json > def create > @foo = Foo.new(foo_params) > > respond_to do |format| > if @foo.save > format.html { redirect_to @foo, notice: 'Foo was successfully > created.' } > format.json { render :show, status: :created, location: @foo } > else > format.html { render :new } > format.json { render json: @foo.errors, status: > :unprocessable_entity } > end > end > end > > # PATCH/PUT /foos/1 > # PATCH/PUT /foos/1.json > def update > respond_to do |format| > if @foo.update(foo_params) > format.html { redirect_to @foo, notice: 'Foo was successfully > updated.' } > format.json { render :show, status: :ok, location: @foo } > else > format.html { render :edit } > format.json { render json: @foo.errors, status: > :unprocessable_entity } > end > end > end > > # DELETE /foos/1 > # DELETE /foos/1.json > def destroy > @foo.destroy > respond_to do |format| > format.html { redirect_to foos_url, notice: 'Foo was successfully > destroyed.' } > format.json { head :no_content } > end > end > > private > # Use callbacks to share common setup or constraints between actions. > def set_foo > @foo = Foo.find(params[:id]) > end > > # Never trust parameters from the scary internet, only allow the white > list through. > def foo_params > params.require(:foo).permit(:bar, :baz) > end > end > > Here's what I have gleaned from this exchange: > > You want to start at the "index" view, and have a form on that page send a > request to the "new" view, passing along a parameter that you will use to > determine what `item_type` is to be created by the "create" method that the > form on the "new" view will display. > > On your Index page, here's what that form could look like: > > <%= form_with url: 'foos/new', method: :get, local: true do |f| %> > <%= f.collection_select :item_type, %w[one two], :to_s, :titleize %> > <%= f.submit 'Choose', name: nil %> > <%- end -%> > > When that form is submitted, you will have access to either 'one' or 'two' > in the params[:item_type] variable. You can do something interesting with > that in the #new controller method. For a start, just to show that it > worked, I changed the generic scaffold new.html.erb page to include this > line: > > <h1>New <%= params[:item_type].to_s.titleize %></h1> > > When I test that, I see either "New One" or "New Two" when that page > loads, depending on the choice I made on the index page. > > Try some of these suggestions in a new, scaffolded controller in a > different Rails app (or the same one, if you've been keeping up with your > version control). Just try it as a test, and see what you can learn. > > Walter > Thanks Walter Like Ariel said, form_with does an ajax request by default unless you add 'local: true' I don't know how they keep that a secret
-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/e922a2fb-4118-41c4-b719-4f98bda7d1e7%40googlegroups.com.