2016-07-28 4 views
0

Я создаю simple_form, который позволяет пользователям создавать новую статью в моей базе данных, предоставляя ссылку на оригинальную статью. Если пользователь предоставляет URL-адрес («original_url»), я буду использовать Nokogiri для получения информации.Rails + Nokogiri: controller create

Я получаю следующее сообщение об ошибке: «неявное преобразование nil в String», которое говорит мне, что вход simple_form из поля «original_url» недоступен для использования в контроллере/Nokogiri.

Возможно ли использовать переменную из simple_form перед ее сохранением?

Мой контроллер - создать код:

def create 
    if @original_url = nil 
    @article = Article.new(article_params) 
    else 
    @url = params[:original_url] #### I think this is where the problem is. How do I pass the "original_url" input into the controller? #### 
    data = Nokogiri::HTML(open(@url)) 
    headline = data.at_css(".entry-title").text.strip 
    @article = Article.new(:headline => headline) 
    end 

    respond_to do |format| 
    if @article.save 
     format.html { redirect_to @article, notice: 'Article was successfully created.' } 
     format.json { render :show, status: :created, location: @article } 
    else 
     format.html { render :new } 
     format.json { render json: @article.errors, status: :unprocessable_entity } 
    end 
    end 
end 

Должен ли я называть "original_url" переменную по-другому?

+0

кажется 'PARAMS [: original_url]' не содержит никакого значения – hgsongra

+0

вы, пожалуйста, укажите свой 'form' код для' original_url' парам? – hgsongra

+0

«Я буду использовать Нокогори, чтобы получить информацию». Важно понять, что Нокогири ничего не «приносит». Он только анализирует и позволяет вам искать/извлекать/изменять/калечить. Как вы извлекаете данные - это выбор, и чаще всего мы используем OpenURI, который предоставляет возможность открывать URL-адрес с помощью 'open' или другого HTTP-клиента. –

ответ

0

Во-первых, вы используете задание в первом условии:

if @original_url = nil 

Так @original_url всегда становится nil и условие никогда не верно. Это классическая ошибка.

Вот как проверить nil в Ruby:

if @original_url.nil? 

Теперь, причина @url равна нулю, наиболее вероятно, что в ваших Params, у вас есть article корень. В этом случае, вам нужно написать:

@url = params[:acticle][:original_url] 
+0

Спасибо! Он работает сейчас :-) Для справки в будущем мне пришлось использовать «if @ url.empty?». а не «если @ original_url.nil?». Если у вас есть время Илья, не могли бы вы поделиться ссылкой на документацию по рельсам, которая объясняет, как работают параметры [: model] [: column]? Было очень сложно найти какую-либо документацию, поскольку я понятия не имел, какие слова использовать :-) Опять же, thx много за помощь! –

+0

Добро пожаловать :) Взгляните на раздел [Параметры официального руководства Rails на контроллерах] (http://guides.rubyonrails.org/v4.2/action_controller_overview.html#parameters), чтобы узнать о возможностях там , Rails Guides - хорошее начало, чтобы узнать о большинстве тем Rails. –