当我单击表单中的“提交"按钮时,创建动作应该可以使用,但是它会由新动作处理 [英] When I click submit button in my form, create action is supposed to work but it is rather processed by new action

查看:83
本文介绍了当我单击表单中的“提交"按钮时,创建动作应该可以使用,但是它会由新动作处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,我有一个应该由create动作处理的表单,但是应该由新动作处理.这个问题在我的任务后表单中发生,但是在我的其他表单(注册表单)中,它运行得很好(通过create action处理).所以我以为罪魁祸首是我的模型关系,所以我也将其张贴在这里:

In my application, I have a form that is supposed to be processed by create action but it is rather processed by new action. This problem is happening in my post task form, but in my other form (registration form), it is working very well (it is processed by create action). So I thought maybe the culprit is in my model relationships so I will post it here as well:

用户模型

has_many :client_relationships, class_name: "Task", foreign_key: "client_id", dependent: :destroy

has_many :worker_relationships, class_name: "Task", foreign_key: "worker_id", dependent: :destroy

has_many :worker_tasks, through: :client_relationships, source: :worker

has_many :client_tasks, through: :worker_relationships, source: :client

任务模型

belongs_to :client, class_name: "User"

belongs_to :worker, class_name: "User"

在我的路线上.rb

resources :users do
  member do
   get :client_tasks, :worker_tasks
   end
  end

resources :tasks

如果您想知道,我在任务表中有两个用户(client_id,worker_id).我在用户表中有一个布尔列来标识它们.我也有属于任务的约会表,但是这里没有包括它.

If you are wondering, I have two users in tasks table (client_id, worker_id). I have a boolean column in users table to identify them. I also have appointment table which belongs to task but I did not include it here.

现在,单击提交"按钮后,我从cmd获取此信息:

Now, after clicking the submit button, Im getting this from cmd:

Processing by TasksController#new as HTML
  Parameters: {"utf8"=>"V", "authenticity_token"=>"e5K/I8TpQJwpqGtapZs7xP4n7i3FF
a9xHVSv7CLVYIsYSomK95x6B+J2hSbr77CHvxI01te8hQ7HOGRTRLANNg==", "task"=>{"category
_id"=>"", "title"=>"", "description"=>"", "pay_type"=>"", "pay_offer"=>"", "coun
ty_id"=>"", "area_id"=>"", "appointments_attributes"=>{"0"=>{"start_date"=>"", "
start_time"=>"", "end_date"=>"", "end_time"=>""}}}, "commit"=>"Create Task"}
ty_id"=>"", "area_id"=>"", "appointments_attributes"=>{"0"=>{"start_date"=>"", "
start_time"=>"", "end_date"=>"", "end_time"=>""}}}, "commit"=>"Create Task"}

并在浏览器上获取该消息:

and im getting this on the browser:

并显示调试消息(最后3行):

and on the debug message (last 3 lines):

提交:创建任务 控制器:任务 动作:新

commit: Create Task controller: tasks action: new

应该是动作:创造",但不是.

It is supposed to be "action: create" but it is not.

这真是太不可思议了,我整天为此一直在头,但仍然无法解决这个问题.我正在使用simple_form btw.请帮助我...我是这里的新手:(

It is really weird, Ive been banging my head all day for this and still can not solve this. I am using simple_form btw. Please help me... I am a newbie here :(

在注册表中

<%= simple_form_for @user, html: {class: 'form-horizontal'}, wrapper: :horizontal_input_group do |f| %>
        <%= f.input :first_name %>
        <%= f.input :last_name %>
        <%= f.input :email %>
        <%= f.input :password %>
        <%= f.input :password_confirmation %>
        <%= f.input :county_id %>
        <%= f.input :area_id %>
        <%= f.button :submit %>
        <% end %>

任务中

<%= simple_form_for @task, html: {class: 'form-horizontal'}, wrapper: :horizontal_input_group do |f| %>

        <%= field_set_tag '<span class="label label-info">1</span> What task do you require?'.html_safe do %>
        <%= f.input :category_id, collection: Category.order(:name), label_method: :name, value_method: :id, label: "Category", include_blank: "Select a category of task" %>
        <%= f.input :subcategory_id, collection: Category.order(:name), as: :grouped_select, group_method: :subcategories %>
        <% end %>

        <%= field_set_tag '<span class="label label-info">2</span> Tell us about the task.'.html_safe do %>
        <%= f.input :title, placeholder: 'Give a descriptive title for your task'%>
        <%= f.input :description, placeholder: 'Describe your task here...' %>
        <% end %>

        <%= field_set_tag '<span class="label label-info">3</span> What budget do you have in mind?'.html_safe do %>
        <ul class="nav nav-tabs" id="payTypeTabs">
            <%= f.input :pay_type, as: :hidden %>
            <li><a href="#fixed-price-tab" data-toggle="tab">Hire for a fixed price</a></li>
            <li><a href="#per-hour-tab" data-toggle="tab">Hire per hour</a></li>
        </ul>
        <h1></h1>

        <%= f.input :pay_offer, wrapper: :horizontal_input_group do %>
        <span class="input-group-addon">€</span>
        <%= f.input_field :pay_offer, as: :integer, class: "form-control" %>
        <span class="input-group-addon">Euro</span>
        <% end %>

        <% end %>

        <%= field_set_tag '<span class="label label-info">4</span> Where will your task take place?'.html_safe do %>    
        <%= f.input :county_id, collection: County.order(:name), label_method: :name, value_method: :id, label: "County", include_blank: "Select a category of task" %>
        <%= f.input :area_id, collection: County.order(:name), as: :grouped_select, group_method: :areas %>

        <% end %>

        <%= field_set_tag '<span class="label label-info">5</span> Set an initial appointment for this task.'.html_safe, :id => "date_time" do %>
        <% f.simple_fields_for :appointments do |b| %>


        <div class="row">

            <div class="col-md-5 col-md-offset-2"><%= b.input :start_date, label: "Start", wrapper: :horizontal_input_group do %>

                <%= b.input_field :start_date, placeholder: 'Start date', class: "form-control date start" %><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>


                <% end %>
            </div>

            <div class="col-md-5"><%= b.input :start_time, label: false, wrapper: :horizontal_input_group do %>


                <%= b.input_field :start_time, placeholder: 'Start time', as: :string, class: "form-control time start" %><span class="input-group-addon"><span class="glyphicon glyphicon-time"></span></span>

                <% end %>
            </div>
        </div>

        <div class="row">
            <div class="col-md-5 col-md-offset-2">
                <%= b.input :end_date, label: "End", wrapper: :horizontal_input_group do %>
                <%= b.input_field :end_date, placeholder: 'End date', class: "form-control date end" %>
                <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
                <% end %>
            </div>
            <div class="col-md-5">
                <%= b.input :end_time, label: false, wrapper: :horizontal_input_group do %>

                <%= b.input_field :end_time, placeholder: 'End time', as: :string, class: "form-control time end" %>
                <span class="input-group-addon"><span class="glyphicon glyphicon-time"></span></span>
                <% end %>
            </div>

            <% end %>
            <% end %>

            <%= f.button :submit %>
            <% end %>

推荐答案

在第一种情况下有效,而在第二种情况下无效,这真的很奇怪.

It is really weird that it works in the first case and not in the second.

尝试一下,

<%= simple_form_for @task, url: tasks_path, method: :post, html: {class: 'form-horizontal'}, wrapper: :horizontal_input_group do |f| %>

这将强制表单使用post方法提交到task_path,后者将转到create动作.让我知道它是否有效

this will force the form to submit to tasks_path with post method which goes to the create action. Let me know if it works

这也是您的创建方法

        def create 
            @task = current_user.client_relationships.build(task_params) 
            if @task.save 
                flash[:success] = "Micropost created!" 
                redirect_to @current_user 
            else 
                render 'new' 
            end 
        end

几个问题.

1)redirect_to @current_user没什么意思,对吧?应该像user_path(@current_user)

1) redirect_to @current_user does not mean anything, right ? should be like user_path(@current_user)

2)您应该始终执行redirect_to并返回,以使重定向后的代码块不会被调用.就您而言,没关系,因为其余的都在else块中

2) you should always do redirect_to and return so that the code block after redirection will not be called. In your case, its ok since the rest is in a else block

3)可能是task.save失败并呈现了新内容.使用调试器并检查是否出现在创建的第一行

3) It could be that task.save fails and new is rendered. use a debugger and check if comes to first line of create

这篇关于当我单击表单中的“提交"按钮时,创建动作应该可以使用,但是它会由新动作处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆