2017-10-07 13 views
1

나는 루비와 레일스에서 ​​실제 안돼서, 나는 이일에 대한 솔루션을 찾고 있었어요. 나는 데이터베이스에 새 항목을 추가하는 내 컨트롤러에 '을 만들 '행동 때 form_tag에서 데이터를 제출해야하지만, 내가 정말 뭔가를 잘못하고 있어요처럼 절대적으로 아무 일도 발생하지 않기 때문에,보고,이 때 form_tag도 리디렉션하지 않는 것 같다 필요한 행동에.Rails 5. form_tag에서 맞춤 동작으로 제출하는 방법은 무엇입니까?

<h1>Todos</h1> 
<% @projects.each do |project| %> 
    <tr> 
     <h2><%= project.title %></h2> 
     <% project.todos.each do |todo| %> 
     <ul style="list-style-type:disc"> 
     <li><%= todo.text %></li> 
     </ul> 
     <% end %> 
    </tr> 
    <% end %> 

    <%= form_tag({controller: "mega", action: "create"}, method: "get", remote: true) do %> 
    <h2>New todo</h2> 
    <p> 
    <%= text_field_tag 'text' %> 
    </p> 
    <p> 
    <%= select_tag 'title', options_from_collection_for_select(@projects, 'id', 'title') %> 
    </p> 
    <p> 
    <%= link_to 'CANCEL' %> 
    <%= link_to 'OK', "", :onclick => "$('#form_id').submit()" %> 
    </p> 
<% end %> 

그리고 컨트롤러 :

class MegaController < ApplicationController 
    def index 
    @projects = Project.all 
    @todos = Todo.all 
    end 

    def update 
    end 

    def create 
    @newTodo = Todo.create(text: params[:text]) 
    @newProject = Project.find_by(title: params[:title]) 
    @newProject.todos << @todo 
    @newTodo.save 
    end 
end 

내 루트 파일 다음은 페이지 코드입니다. 나는 진지하게 그것이 어떻게 작동하는지 모른다 :

Rails.application.routes.draw do 
    get 'mega/index' 

    root 'mega#index' 

    get 'mega/update' 

    post 'mega/create' 

    resources :todos 
    resources :projects 

end 
+0

은 (당신이 당신의 서버를 실행하는 경우) 당신은 아마 콘솔에 라우팅 오류가 발생한다처럼 보인다. 양식은 일반적으로 '얻지 않습니다'. 그들은 보통 '게시'합니다. 어쨌든, 콘솔의 텍스트를 질문에 추가하여 상황을 볼 수 있도록해야합니다. – jvillian

+0

오류가 보이지 않습니다. 오류 로그를 찾는 방법이 있습니까? – UsedC

+0

할 일이 있다면 지금까지 여러 가지 리소스를 생성하는 작업을 만드는 것입니다. 그것의 진보 된 화제 thats는 멍청한 놈에게 정말로 적합하지 않습니다. 나는 당신이 좋은 튜토리얼을 가지고 레일 관례를 먼저 알아내는 것이 좋습니다. – max

답변

2

당신은 POST 요청으로 자원을 만든다. 절대 얻지 마십시오. 그들은 업데이트하거나 서버의 리소스를 변경해서는 안 -

GET 요청은 멱등해야합니다. 매우 중요한 이유 중 하나는 브라우저 기록에 저장되므로 뒤로 버튼을 누르면 의도하지 않은 결과가 발생할 수 있다는 것입니다. 대신 올바른 행동 경로 생성하기 위해 HTTP 동사를 사용하는 경로의 경로에 작업 이름을 시침의

레일

에게 맛 MVC : 나는인양을 시도하지 않을거야

GET /things things#index 
POST /things things#create 

당신의 코드 (그것은 깊은 결함이다) 대신 훨씬 간단하다 당신이 레일 방식을 해결할 방법을 보여

<%= form_for(Todo.new) do |f| %> 
    <h2>New todo</h2> 
    <%= f.text_field :text %> 
    <%= f.follection_select(:project_id, @projects, :id, :title, prompt: true) %> 
    <%= f.submit %> 
<% end %> 

todos#create에 제출하는 것입니다 - 당신이 사용할 수있는 틀에 얽매이지 않는 행동 노선을 원하는 경우 url 옵션 :

<%= form_for(Todo.new, url: polymorphic_path(controller: 'foo', action: 'bar')) do |f| %> 

하지만 규칙을 위반하기 전에 알아 두십시오.

+0

대신 잘못 짚었 이일 지출 당신이 [레일 튜토리얼] 같은 튜토리얼을 시작 할 수 있습니다 (https://www.railstutorial.org/). 좋은 앱을 만드는 것과 생산성을 높이는 것만으로는 Rails 앱을 만드는 방법을 배우는 것과 관련해서는 직접 알지 못합니다. – max