当我单击表单中的“提交"按钮时,创建动作应该可以使用,但是它会由新动作处理 [英] When I click submit button in my form, create action is supposed to work but it is rather processed by new action
问题描述
在我的应用程序中,我有一个应该由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:
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屋!