在我的应用程序中,我有一个应该由create action处理的表单,但它由新操作处理。这个问题发生在我的帖子任务表单中,但在我的其他表单(注册表单)中,它运行得很好(它由create action处理)。所以我想也许罪魁祸首就在我的模特关系中,所以我也会在这里发布:
用户模型
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"
在我的routes.rb
中resources :users do
member do
get :client_tasks, :worker_tasks
end
end
resources :tasks
如果您想知道,我在tasks表中有两个用户(client_id,worker_id)。我在users表中有一个布尔列来标识它们。我也有预约表属于任务但我没有在这里包括它。
现在,点击提交按钮后,我从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"}
并且我在浏览器上获取此信息:
和调试消息(最后3行):
提交:创建任务 控制器:任务 行动:新的
应该是“action:create”,但事实并非如此。
这真的很奇怪,我一整天都在为此敲打我的脑袋,仍然无法解决这个问题。我正在使用simple_form btw。请帮帮我......我是新手:(
以登记表格
<%= 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 %>
答案 0 :(得分:0)
它在第一种情况下工作而不是在第二种情况下工作真的很奇怪。
试试这个,
<%= simple_form_for @task, url: tasks_path, method: :post, html: {class: 'form-horizontal'}, wrapper: :horizontal_input_group do |f| %>
这将强制表单使用post方法提交到tasks_path,该方法将转到create动作。让我知道它是否有效
此外,这是您的创建方法
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)
2)你应该总是执行redirect_to并返回,以便不会调用重定向后的代码块。在你的情况下,它是好的,因为其余的是在一个else块
3)可能是task.save失败并且渲染了new。使用调试器并检查是否来到创建的第一行