Rails发布重定向以显示操作而不是保存

时间:2014-05-18 04:53:33

标签: ruby-on-rails ruby-on-rails-4

我的代码:

    def receive
        @flick = Flick.new(  flick_params )
        if @flick.save
            redirect_to root_path
        else
            redirect_to root_path, notice: "WTF"
        end
    end

    def show

    end

出于某种原因,当我拨打http://localhost:3000/flicks/receive?user_id=asdadasd而不是将我重定向到show动作并且什么都不做时,它不会创建轻弹。不知道为什么会这样。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果接收操作是post方法,则必须指定要在创建表单中发布的方法。它应该是这样的,

<%= form_for @flick, method: :post do |f| %>
<% end %>

试试这个,它应该有效。

答案 1 :(得分:2)

http://localhost:3000/flicks/receive?user_id=asdadasd

这是GET网址

如果您必须将user_id作为附加网址参数包含在内,我强烈建议您使用devisesessions之类的内容为您提供方法跟踪user_id,以便您可以直接在控制器中访问它。不通过网址


<强>表格

关于你的问题,你需要记住Rails不会为了它而加载show动作。您将遇到导致此问题的问题

我怀疑您在method: :get中使用form(正如Mohanraj所建议的那样)。这是一个问题,您的showcreate方法属于同一个routing resource

GET /photos photos#index    display a list of all photos
GET /photos/new photos#new  return an HTML form for creating a new photo
POST    /photos photos#create   create a new photo
GET /photos/:id photos#show display a specific photo
GET /photos/:id/edit    photos#edit return an HTML form for editing a photo
PATCH/PUT   /photos/:id photos#update   update a specific photo
DELETE  /photos/:id photos#destroy  delete a specific photo

这意味着如果您使用GET请求提交表单,那么您将获得show操作

<强>修正

我建议您尝试Mohanraj提供的答案:

<%= form_for @var do |f| %> #-> this will default to POST
<% end %>