2017-10-25 10 views
0

WordPressの機能を複製したいと思います。私はcreate方法とnewメソッドを作成したRailsのリソースルートを使用しRuby on Rails 2つの方法でデータをモデルに保存します

を「投稿を公開」と「ドラフトを作成する」 - あなたは新しい投稿を作成して、二つの方法で保存することができる。例えば

また、パブリッシュモードとドラフトモードで保存するカスタムメソッドを作成しました。

class GroupEventsController < ApplicationController 
def new 
    @ge = GroupEvent.new 
end 

def publishnew 
    @ge = GroupEvent.new(groupevent_params) 
    @ge.save 
    redirect_to @ge 
end 
def create 
    @ge = GroupEvent.new(groupevent_params) 
    @ge.save 
    redirect_to @ge 
end 

private 
def groupevent_params 
    abort params.inspect   
    params.require(:group_event).permit(:name, :description, :startdate, :duration, :status) 
end 

フォームを送信すると完璧に機能しますが、新しいメソッドを公開すると機能しません。 このようなエラーが表示されます。 paramが存在しないか、値が空です。group_event

どのように修正できますか?

+1

コンソールに出力を追加する必要があります(コメントを投稿するのではなく、質問を編集してください)。あなたのパラメータに 'group_event'がないことが分かります。また、しばらくの間、Railsをやっていたら、命名規則に従うことはありません(特に、あなたの最後の質問にはあなたの挑戦でした)。 – jvillian

+0

'publishnew'アクションにどのように投稿するのですか? JS? –

答えて

1

私は、同じような振る舞いを得るために、別のアプローチを提案します。

私が正しく理解している場合は、フォームの送信が異なる動作をしたいと考えています。これはあなたのようないくつかのことを行うことができ、コントローラのアクションに続いて

<input type="submit" value="publish" id=".." name="commit" /> 
<input type="submit" value="draft" id=".." name="commit" /> 

のようないくつかのものを持っています

f.submit :publish 
f.submit :draft 

約2つのボタンを追加する方法

...

class GroupsEventsController < ApplicationController 
    def create 
    if params[:commit] == 'publish' 
     publish_event 
    else 
     draft_event 
    end 
    end 

    private 

    def publish_event 
    // Appropriate code here 
    end 

    def draft_event 
    // Appropriate code here 
    end 
end 

そうすれば、クライアント側でJS foo dooを実行して別のルートにポストする必要はありません。

関連する問題