【问题标题】:Ruby on Rails Save Data into model in two waysRuby on Rails 以两种方式将数据保存到模型中
【发布时间】:2018-04-07 03:10:22
【问题描述】:

我想复制 wordpress 发布功能。

例如,您可以通过两种方式创建新帖子并保存 - “发布帖子”和“制作草稿”

使用 Rails 资源路由我创建了create 方法和new 方法。

我还创建了自定义方法以在发布模式和草稿模式下保存。

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

提交表单时它工作得很好,但是当你去 publishnew 方法时它不起作用。 它显示了这样的错误。 参数丢失或值为空:group_event

我该如何解决?

【问题讨论】:

  • 您需要将控制台中的输出添加到您的问题(通过编辑您的问题,而不是通过发布到 cmets)。相信你会发现你的参数中没有group_event。此外,如果您打算使用 Rails 一段时间,遵循命名约定也没有什么坏处(尤其是因为这是您对上一个问题的挑战)。
  • 您如何将其发布到publishnew 操作? JS?

标签: ruby-on-rails ruby model-view-controller model


【解决方案1】:

我建议使用不同的方法来获得相同的行为。

如果我理解正确,您希望表单提交的行为会有所不同。

添加两个按钮怎么样...

f.submit :publish
f.submit :draft

这会有一些类似

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

然后在控制器动作中你可以做一些类似的事情

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 来让它发布到不同的路由。

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多