2016-12-19 6 views
0

私はそれが簡単だと知っていますが、私は解決策の周りに頭を浮かべることはできません。Rails:サブミット/保存前にコンテンツを確認する方法は?

求人掲示板サイトです。それはthis siteに似た機能だと言います。ユーザーが必要な情報をすべて入力して「次のステップに進む」または「プレビュー」をクリックすると、別のページがすべてのデータで読み込まれます。そのページは、データが保存されるときの最終ページと似ています。

プレビューページのユーザーは、ページに進むことができます(この場合はDBに保存されます)。または、ジョブを編集するに戻るをクリックします。

Iは、以下を試み::

  • _form.html.erb内私は方法プレビュービュー/jobs/preview.html.erb

    を作成 def create if params[:preview] @job = Job.new(jobs_params) render 'jobs/preview' else @job.save end end

  • を作成変更JobControllers内プレビューボタン <%= f.submit "Preview", :name => 'preview' %>

  • を添加

今は2つの問題があります。

1-私のプレビューページ内に、編集ボタンがあります:<%= link_to "Edit Job", edit_job_path(@job) %>。しかし、私は@jobが見つからないのでエラーがあります。エラーは言う:私はプレビューページ上のすべての情報を提出し、私のDBに追加する方法<%= link_to 'Back to edit', 'javascript:history.go(-1);' %>

2 - に似変更​​

SOLUTIONを?

ありがとうございます。

+2

を添加し、ダッシュボード

... = link_to "Preview", preview_book_path(book, secret: book.secret) ... 

def preview # i don't check if the record is active. # also added a security layer, to prevent irrelevant guys to view # that record if @book.secret == params[:secret] render 'show' else ... end end 

をコントローラにプレビューアクションを追加しましたか?誰もが特定のコード/エラー/などなしで助けることは非常に困難になるでしょう – whodini9

答えて

0

いつも私がやっていることは、自分のアプリでレビューテーブルを作成することです。このテーブルは、保存するテーブルのように見えます。

"承認済み"または "保存"ボタンを押すと、新しいテーブルに適切なデータが入力されます。

def move_to_something_else 
    @something = Something.find(params[:id]) 
    @something_else = SomethingElse.new 
    @something_else.name = @something.name 
    .... 
    @something_else.save 
    redirect_to something_else_path(@something_else) 
end 

代替デフォルト値を使用して、テーブルに状態を追加することができます。

は、私たちは次のことを行うことができ、コントローラに今、この

resources :something do 
    match 'move_to_something_else' => 'somethings#move_to_something_else', as: :move_to_something_else, via: :all 
end 

を処理するためにルートを作成したいです「ドラフト」の

# config/routes.rb 
resources :something do 
    match 'published' => 'somethings#published', as: :published, via: :all 
end 

# Controller 
def published 
    @something = Something.find(params[:id]) 
    @something.state = 'published' 
    @something.save 
    redirect_to something_path(@something) 
end 
+2

なぜ別のテーブル、はるかに簡単にドラフトなどと呼ばれる列を持っています。 – Iceman

+0

おそらくあなたは変更の履歴を持ちたいと思うかもしれません。それはまた、新しいテーブルクリーナーのデータを保持する –

+1

まあ、私は同意しない、しかし、それはプログラミングの美しさだと思う。 papertrailのようないくつかの宝石を使うことは、バージョン履歴IMOにとってはより良いでしょう。 – Iceman

0

これまで同じような作業をしています。私がしたのはで、レコードを保存しますが、公開はしません。関連コントローラの私のインデックス(リソースリスティング)アクションでは、私はpublishedレコードしか取得しません。また、そのレコードのpublished属性がtrueに設定されている場合、アクションの事前チェックも表示します。

私のモデル/コントローラは

#model 
class Book < ActiveRecord::Base 
    ... 
    scope :active, -> { where(published: true).some_other_queries } 

    self.active? 
    (published && some_other_requirements) 
    end 
    ... 
end 


#controller 
def index 
    @books = Book.active 
    ... 
end 

def show 
    if @book.active? 
    render 'show' 
    ... 
    else 
    ... 
    end 
end 

前のように見えた何まずプレビュー用の秘密鍵を追加しました。

#model 
def secret 
    #some custom random key generation 
    # e.g. Digest::MD5.hexdigest("#{id}_#{ENV['RAILS_SECRET']}") 
end 

次に動作していないいただきましたメンバー経路

#routes 
resources :books do 
    get :preview, on: :member 
end 
関連する問題