2012-07-14 11 views
8

Tengo un modelo de relación unidireccional entre usuarios (los usuarios tienen muchas relaciones) que contiene los identificadores de dos usuarios dados junto con el apodo del usuario a para el usuario b. Quiero utilizar un formulario para permitir a los usuarios pasar una dirección de correo electrónico de otro usuario y el alias. Si existe un usuario con ese correo electrónico, cree una relación entre los usuarios. Si ningún usuario coincide, crea un nuevo usuario "fantasma" con ese correo electrónico y luego crea la relación.Cómo pasar valores arbitrarios (no atributo de modelo) a una acción de rieles?

soy relativamente nuevo en los carriles, y el primer ingenuamente trató de usar la básica:

= form_for @relationship do |f| 
    = f.label :email 
    = f.text_field :email 
    = f.label :nickname, "Nickname" 
    = f.text_field :nickname 
    = f.submit "Submit", class: "btn btn-large btn-primary" 

Esta falla porque el modelo de relación no contiene un atributo de correo electrónico. Luego intenté lo siguiente, pensando que podría funcionar porque no hacía referencia directa al modelo de relación.

= form_tag :controller => "relationships", :action => "create" do 
    = label :email   
    = text_field :email 
    = label :nickname, "Nickname" 
    = text_field :nickname 
    = submit "Submit", class: "btn btn-large btn-primary" 

Pero eso genera un error "número incorrecto de argumentos (1 de 2)"

que podría añadir un campo de correo electrónico para el modelo de relación, pero no es necesario aparte de cuando lo usaré para buscar el usuario deseado. Mi plan era usar los valores de correo electrónico y sobrenombre pasados ​​a la acción de creación en el controlador de relación para crear la relación o crear un nuevo usuario y luego la relación según el caso. Entonces, ¿cómo puedo pasar valores arbitrarios a una acción de controlador?

Respuesta

11

Utilice la primera forma, y ​​simplemente haga un attr_accessor en su modelo el atributo de correo electrónico.

Eso básicamente hace una variable temporal que puede derivarse de algo así como un formulario, pero no guardará en la base de datos.

class Relationship < ActiveRecord::Base # <- Assuming that's the name of your Relationship model 

    attr_accessor :email 
+3

¿Qué pasa en Rails 4 with strong params? – Micah

+3

@Micah Consultar http://stackoverflow.com/a/15920542. Solo es cuestión de agregarlos a la lista de parámetros permitidos. – Anthony

Cuestiones relacionadas