我对 Rails 完全陌生,并且在通过 ListaUsuarios 视图通过此链接发送参数时仍然遇到问题,尽管现在已经尝试和研究了很多小时:
<%= link_to "Agregar", @solicitud_contacto, method: :post %>
它确实按预期进行了创建操作,因为我已经设置了
resources :solicitud_contactos
在 routes.rb 中。但是我收到以下错误:
ActiveRecord::StatementInvalid in SolicitudContactosController#create
SQLite3::ConstraintException: solicitud_contactos.solicitante_id may not be NULL: INSERT INTO "solicitud_contactos" ("created_at", "solicitado_id", "solicitante_id", "updated_at") VALUES (?, ?, ?, ?)
只是为了解释一下,既然问题出现了:SolicitudContacto 应该是添加另一个用户的需求(“友谊”或“联系”需求),以便第二个用户可以接受或拒绝该需求。所以我只是想在有人点击链接时将这样的需求保存在数据库中。“Usuario”(“SolicitudContacto”模型中的属性类型)仅表示“用户”。
另外,我得到它的方式,下面的链接应该得到一个等效的结果:
<%= link_to "Agregar", solicitud_contacto_path(@solicitud_contacto), method: :post %>
但它给了我一个不同的错误。显然,这里的 id 被转移了,但是链接转到了 show 操作。
Routing Error
No route matches {:action=>"show", :controller=>"solicitud_contactos", :id=>#<SolicitudContacto id: nil, solicitante_id: 2, solicitado_id: 4, created_at: nil, updated_at: nil>}
我遇到同样的问题
<%= link_to "Rechazar", @solicitud_contacto, :method => :delete %>
在同一个视图中。
编辑:感谢 Baldricks 的评论,至少删除链接现在有效,我不记得我必须使用数据库中的实际对象。因此,将相应的 if 块替换为以下内容即可:
<% if (index = @solicitantes.index { |solic| solic.solicitante.id == usuario.id }) != nil %>
<%= link_to "Rechazar", @solicitantes[index], :method => :delete %>
@solicitud_contacto 对象与对应的 id
@solicitud_contacto.solicitante.id @solicitud_contacto.solicitado.id
肯定是设置的,因为我将它们打印在同一视图中进行测试。我希望有人可以帮助我,因为这真的有点令人沮丧......非常感谢!
PS:
我还读到:
<%= javascript_include_tag "application" %>
应在 application.html.erb 中设置。这是!
这是相关代码:
SolicitudContacto模型
class SolicitudContacto < ActiveRecord::Base
attr_accessible :solicitado_id, :solicitante_id
belongs_to :solicitado, class_name: "Usuario"
belongs_to :solicitante, class_name: "Usuario"
end
Solicitud联系控制器
class SolicitudContactosController < ApplicationController
def create
@solicitud = SolicitudContacto.new(params[:solicitud_contacto])
@solicitud.save
redirect_to :controller => SearchUsersController, :action => BusquedaUsuarios
end
def destroy
@solicitud = SolicitudContacto.find(params[:id])
@solicitud.destroy
redirect_to :controller => SearchUsersController, :action => BusquedaUsuarios
end
def index
@solicitudes = SolicitudContacto.all
end
def new
end
def show
@solicitud = SolicitudContacto.find(params[:id])
end
end
搜索用户控制器
class SearchUsersController < ApplicationController
def BusquedaUsuarios
@usuario = Usuario.new
end
def ListaUsuarios
# DELETE!!!!!
$current_usuario = Usuario.find(2)
@cur_usuario = $current_usuario;
@solicitud_contacto = SolicitudContacto.new
@usuario = Usuario.new(params[:usuario])
@filtros = Hash.new(0);
if @usuario.nombre != ""
@filtros["nombre"] = @usuario.nombre
end
if @usuario.apellido != ""
@filtros["apellido"] = @usuario.apellido
end
if @usuario.email != ""
@filtros["email"] = @usuario.email
end
@solicitados = @cur_usuario.solicitantes
@solicitantes = @cur_usuario.solicitados
@contactos = @cur_usuario.user1s + @cur_usuario.user2s
@usuarios = Usuario.where(@filtros).order(:nombre).all
end
end
ListaUsuarios(SearchUsersController 的用户列表视图)
<h1>SearchUsers#ListaUsuarios</h1>
<p>Find me in app/views/search_users/ListaUsuarios.html.erb</p>
<table>
<tr>
<th>Nombre</th>
<th>Apellido</th>
<th>Email</th>
<th></th>
</tr>
<% @usuarios.each do |usuario| %>
<tr>
<td><%= usuario.nombre %></td>
<td><%= usuario.apellido %></td>
<td><%= usuario.email %></td>
<td>
<% @solicitud_contacto.solicitante = @cur_usuario %>
<% @solicitud_contacto.solicitado = usuario %>
<br>
<%= @solicitud_contacto.solicitante.id %>
<%= @solicitud_contacto.solicitado.id %>
<br>
<!-- responder la solicitud -->
<% if @solicitantes.index { |solic| solic.solicitante.id == usuario.id } != nil %>
<%= link_to "Rechazar", @solicitud_contacto, :method => :delete %>
<!-- solicitud ya fue mandada -->
<% elsif @solicitados.index { |solic| solic.solicitado.id == usuario.id } != nil %>
Esperando Respuesta
<!-- solicitar contacto -->
<% else %>
<%= link_to "Agregar", @solicitud_contacto, method: :post %>
<% end %>
</td>
</tr>
<% end %>
</table>