2015-08-20 2 views
1

У меня есть ресурс, решение, принадлежащее группе. У группы есть несколько решений. Я хочу, чтобы первичный ключ (id) группы сохранялся в целочисленном поле group_id при каждом решении, которое было сохранено в базе данных. Я делаю это таким образом, и это работает, но это похоже на действительно смущенный способ сделать это. Есть ли более прямой или «Railsy» способ сделать это?Получение родительского идентификатора нового вложенного ресурса для формы

Для начала, мои действия контроллера/вид имеет переменную экземпляра группы и связать с формой таким образом:

<%= link_to "New decision", new_group_decision_path(@group) %> 

..so, что моя форма на/групп /: GROUP_ID/решения/новый

Мой новый метод под DecisionsController создает новое @decision для формы и передает ему: group_id, полученный мной из параметров.

def new 
    @decision = Decision.new(group_id: params[:group_id] 
end 

Я тогда тянуть, что @ decision.group_id в том виде, в new.html.erb и положить его в hidden_field так, что решение будет создаваться с group_id. Нужно ли передавать этот group_id через params, затем переменную экземпляра, затем через скрытое поле или есть более прямой способ? Благодаря!

ответ

2

Во-первых, изменить new действие, чтобы сделать его более «railsey» ... Некоторые незначительные изменения в контроллере

before_action :set_group, only: [:new, :create] # or other actions that do not apply here 

def new 
    @decision = @group.decisions.build # or new 
end 

def create 
    @decision = @group.decisions.create(decision_params) 
end 


private 
    def set_group 
     @group=Group.find(params[:group_id]) 
    end 

    def decision_params 
     params.require(:decision).permit(:list,:of,:permitted,:params) 
    end 

Таким образом, вам не нужно передавать скрытые поля или другие средства для разъяснения группа: это уже в URL-адресе ...

Смежные вопросы